孤儿进程

僵尸即“死了还活着”,子进程已经终止了,也就是说子进程死了。但是系统会保留子进程的信息(进程ID/终止状态/使用的CPU时间总量),这些残余信息仍然存在,也就是说某种意义上还活着。

孤儿则是父进程终止了,也就是丧父。

孤儿进程被1号init进程领养,当然要有init进程回收喽。

来段代码感受一下

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

	//一个父进程退出,而它的一个或多个子进程还在运行,
	//那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,
	//并由init进程对它们完成状态收集工作。孤儿进程是没有父进程的进程,
   //孤儿进程这个重任就落到了init进程身上,init进程就好像是一个民政局,
	//专门负责处理孤儿进程的善后工作。
int main(int argc, const char* argv[])
{
    pid_t pid;

    pid = fork();
    if(pid == -1)
    {
        perror("fork error");
        exit(1);
    }

    if(pid > 0)
    {
		
        printf("i am parent process, pid = %d, ppid = %d\n", getpid(), getppid());
    }
    else if(pid == 0)
    {
        printf("i am child process, pid = %d, ppid = %d\n", getpid(), getppid());
        sleep(100);
    }

    return 0;
}

孤儿进程的详细讲解_进程状态
再打开另一个终端输入 ps -axj | grep test查看进程状态
孤儿进程的详细讲解_父进程_02

孤儿进程的危害

没什么危害。因为该进程只是父进程换成了 init ,依然可以正常运行。