问题描述
- Linux父进程先于子进程终止后子进程的ppid不是init进程的id 1
-
关于父进程先于子进程终止后,子进程应该由init进程收养,所以子进程的ppid不应该是1吗?但我用C语言查看时显示的确是另一个进程id:1795#include<unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/wait.h> int main(void) { pid_t pid; if((pid = fork()) == 0) { sleep(4); printf("child 1, pid = %dtppid = %dn",pid, getppid()); exit(0); } if((pid = fork()) == 0) { sleep(3); printf("child 2, pid = %dtppid = %dn",pid, getppid()); exit(0); } printf("parent, pid = %dtppid = %dn", getpid(), getppid()); exit(0); }
结果如下:
parent, pid = 5462 ppid = 5305
child 2, pid = 5464 ppid = 1759
child 1, pid = 5463 ppid = 1759求解释
解决方案
你这个打印出来的结果绝对是有问题的 ,我用你的代码重新敲了一下,我打印出来的结果是;
parent,pid = 5813 ppid = 5352
child 2 pid = 0 ppid = 1
chiled 1 pid = 0 ppid = 1
这样看来你所打印的pid 和ppid 都有问题,代码我觉得没什么问题 ,但是,看不懂你的打印结果
解决方案二:
pid应该是0,ppid应该是1.这才符合进程管理机制
解决方案三:
我也遇到了这种情况,用ps命令看了一下发现打出来的父进程号是init,ps:我也是ubuntu
解决方案四:
我也遇到了这种情况,用ps命令看了一下发现打出来的父进程号是init,ps:我也是ubuntu
解决方案五:
我在Ubuntu下也是这样,貌似跟Ubuntu采用的upstart有关,用一个名为init --user的进程代替了init,
只有kill掉那个进程才会被init接管。。。不知道有什么差别?
求解惑。。
时间: 2024-09-12 21:53:29