在看APUE时,照8-8例敲了如下代码
#include"apue.h"
#include<error.c>
#include <sys/wait.h>
int main(void)
{
pid_t pid;
if((pid = fork()) < 0)
err_sys("fork error");
else if(pid == 0)
{
if((pid= fork()) < 0)
err_sys("fork error");
else if(pid > 0)
exit(0);
sleep(4);
printf("second child, parent pid = %ld\n",(long)getppid());
exit(0);
}
if(waitpid(pid, NULL, 0) != pid)
err_sys("waitpid error");
exit(0);
}
输出second child, parent pid = 2372
按理说,第一个子进程结束,第二个子进程的父进程应该是init进程,pid = 1,
为啥我这个总是等于2372呢
root@jack:/opt/unix/180620# ./fork2.out
parent, pid = 55370
first child, parent pid = 55371
second child,pid =55372, parent pid = 2372
我把每个进程id都打印出来了,难道2372就是我的init进程?
https://segmentfault.com/a/1190000004443038
问题解决
我在另一台电脑上试了,pid = 2157
使用ps aux 看了一下进程
有init进程的,pid = 1,但是!!!这个init是root用户的
继续向下找会发现2157进程对应的是jack用户(普通用户)的 init 进程
但是没法自己采纳自己,有哪位能告诉我为什么使用的是jack的init,而不是root的init吗?