该程序是通过 fork 两次来避免僵尸。我得到了孤儿进程的父 pid 的值,除了 1,这是不对的。
这是我试过的代码。如果逻辑上有错误,请帮助我。
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
pid_t processid;
if((processid=fork())<0)
printf("Fork error\n");
else if(processid==0)
{
if((processid=fork())<0)
printf("Fork error\n");
if(processid>0)
{exit(0);}
sleep(2);
printf("second child, parent pid =%d\n",getppid());
exit(0);
}
exit(0);
}
这是我得到的输出:
root@kali:~# gedit avoidzombies.c
root@kali:~# gcc avoidzombies.c
root@kali:~# ./a.out
root@kali:~# second child, parent pid =1069
最佳答案
在我的系统上,我也得到了一个不同的 pid -- 但那个 pid 对应于 upstart,它是 init 的替代品。因此,它工作正常,但 init(替代)进程的 pid 不是 1。– Dmitri
关于c - 通过杀死其父进程而成为孤儿的子进程不会被 init 收养。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37418226/