ubuntu18下孤儿进程的ppid不是1的问题

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

Linux学习新手,在练习过程中发现孤儿进程的ppid怎么样都不是1,找了网上大佬的代码也试过了还是不行。

最后发现原来是图形界面与命令行有差别的原因。

在ubuntu的图形界面中,发现代替了init进程来接管孤儿进程的进程名字叫做init–user,并且这个进程号并不是1。
切换到命令行之后,ppid = 1 就出现啦!

ubuntu 18 命令行和图形界面切换
图形界面切换到命令行:Ctrl+Fn+Alt+F3(F4/F5/F6)(或者去掉Fn,直接按Ctrl+Alt+F3(F4/F5/F6)下同)
命令行界面切换回图形界面:Ctrl+Fn+Alt+F2(返回到原来的图形界面) 或Ctrl+Fn+Alt+F1(这是直接返回图形界面的锁屏状态)

贴上代码:

#include 
#include 
#include 
#include 

int main()
{
    pid_t pid;
    pid = fork();
    if (pid < 0)
    {
        perror("fork error:");
        exit(1);
    }
    //子进程
    if (pid == 0)
    {
        //打印子进程初始信息
        printf("This is the child process. pid: %d\tppid:%d\n",getpid(),getppid());
        sleep(10);
        //子进程变成孤儿进程后的信息
        printf("The pid: %d\tppid:%d\n",getpid(),getppid());
        printf("child process is exited.\n");
    }
    //父进程
    else
    {
        printf("This is the father process.\n");
        sleep(1);//父进程先于子进程退出
        printf("Father process is exited.\n");
    }
    return 0;
}

你可能感兴趣的:(Linux)