孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被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 <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
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);
//子进程变成孤儿进程后的信息
prin