上次我们介绍了僵尸进程,僵尸进程是进程的一种状态,我们今天说的是孤儿进程,孤儿进程并不是进程的一种状态,它是一类进程的名字,僵尸进程是因为我们的子进程突然死亡,并且我们的父进程没有查看他的死亡原因,他就会一直保留着自己的task_struct里边存储着他的一些死亡信息等等,这就形成了僵尸进程,孤儿进程和僵尸进程相反,孤儿进程顾名思义就是我们的父进程死亡了,但是我们的子进程依然存在,孤儿进程最后都会由pid=1的init进程收养,并且在子进程结束之后由init进程给他“收尸”,因此一般来说孤儿进程是没有什么危害的。
这里我们通过一段程序来制造一个孤儿进程。
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 #include<string.h>
5 #include<errno.h>
6
7 int main()
8 {
9 pid_t id=fork()
10 if(id<0)
11 {
12 perror("fork erroe\n");
13 return -1;
14 } else if(id==0)
15 {
16 printf("child: %d\n",getpid());
17 sleep(30);
18 }
19 else
20 {
21 printf("parent: %d\n",getpid())