父进程执行回收
父进程收到子进程的退出状态
内核删掉僵死子进程
如果父进程没有回收它的僵死子进程就终止了,内核安排 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 回收子进程
非终止子进程
子进程中无限循环,上面的例子中是父进程中在无限循环

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