红联Linux门户
Linux帮助

Ubuntu下孤儿进程问题

发布时间:2017-07-25 10:27:07来源:linux网站作者:刘付杰
在学习Linux c编程实战的进程控制一章时,书上关于孤儿进程的例子如下:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
int main(){
pid_t pid;
pid = fork();
int n = 5;
switch(pid){
case 0:
while(n--){
printf("当前为子进程 pid = %d,"
"ppid = %d\n",getpid(),getppid());
sleep(3);
}
break;
case -1:
printf("进程创建失败\n");
exit(-1);
default:
printf("当前为父进程 pid = %d\n",getpid());
}
return 0;
}
 
按照书上的说法,当一个进程的父进程结束后,其未结束的子进程将被init进程(pid=1)收养,因此程序的输出应该为:
当前为父进程 pid = 7154
当前为子进程 pid = 7155 , ppid = 7154
当前为子进程 pid = 7155 , ppid = 1
当前为子进程 pid = 7155 , ppid = 1
当前为子进程 pid = 7155 , ppid = 1
当前为子进程 pid = 7155 , ppid = 1
 
但是在Ubuntu上实测的结果却是:
Ubuntu下孤儿进程问题
(额这个中间的目录名是怎么了)
 
从运行结果来看,在进程7155的父进程结束后,孤儿进程被4592收养?为什么?4592是什么?
然后:
Ubuntu下孤儿进程问题
查到了4592这个家伙,upstart又是什么东西,查了一番资料才知道,upstart是Ubuntu使用的用来代替init的东西,它的优点在于更快的启动系统,以及在硬件热拔插的时候启动或者停止相关服务.
而在Ubuntu的图形界面下,孤儿进程会被upstart收养而不是init.
 
本文永久更新地址:http://www.linuxdiyf.com/linux/32108.html