Ubuntu下孤儿进程问题

在学习Linux c编程实战的进程控制一章时,书上关于孤儿进程的例子如下:

#include
#include
#include
#include
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下孤儿进程问题_第1张图片
(额这个中间的目录名乱入是怎么了…)

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

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

你可能感兴趣的:(Linux,C语言)