Ubuntu下孤儿进程问题

来源:互联网 发布:淘宝网大码女装店连衣裙 编辑:程序博客网 时间:2024/06/08 04:28

在学习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上实测的结果却是:
这里写图片描述
(额这个中间的目录名乱入是怎么了…)

从运行结果来看,在进程7155的父进程结束后,孤儿进程被4592收养??为什么??4592是什么鬼??
然后:
这里写图片描述
查到了4592这个家伙,upstart又是什么鬼东西…..查了一番资料才知道,upstart是Ubuntu使用的用来代替init的东西,它的优点在于更快的启动系统,以及在硬件热拔插的时候启动或者停止相关服务.

而在Ubuntu的图形界面下,孤儿进程会被upstart收养而不是init.