父进程执行回收

使用waitpid函数和wait函数

父进程收到子进程的退出状态

内核删掉僵死子进程

如果父进程没有回收它的僵死子进程就终止了,内核安排 init 进程去回收这些僵死子进程(init 进程 PID 为1,系统启动时创建,不会终止,是所有进程的祖先)

杀掉父进程,init回收僵尸子进程

杀掉父进程,init回收僵尸子进程
父进程中无限循环

#include <stdio.h>
#include <unistd.h> // Include the necessary header file
#include <stdlib.h> // Include the necessary header file
 
int main(){
  if(fork() == 0) {
    printf("Terminating Child, PID = %d\n", getpid());
    exit(0);
  } else {
    printf("Running Parent, PID = %d\n", getpid());
    while(1);
  }
}
 


ps 命令显示:子进程的状态标记为 “defunct” 即,僵死进程
杀死父进程,从而让 init 回收子进程

非终止子进程

子进程中无限循环,上面的例子中是父进程中在无限循环

子进程中在无限循环,杀掉了父进程也无法终止子进程,必须明确杀死子进程否则将无限持续地运行下去