按照正常的执行方式,孤儿进程应该被init进程收养(pid=1),但在测试过程中出现问题
这其实和运行界面的不同有关
图形界面终端,shell其实是init进程的一个子进程,故孤儿进程其实是被shell所收养
在字符化界面运行时,ppid就是1了
字符化界面和图形界面切换:
图形界面切换到字符型界面:
Crtl+Alt+F3/Ctrl+Fn+Alt+F3
字符型界面切换到图形界面:
Ctrl+Alt+F2/Ctrl+Fn+Alt+F2
下面是源码和两种界面的输出情况
测试源码:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
int main(){
pid_t pid;
pid = fork();
switch(pid){
case -1:
printf("创建进程错误!\n");
exit(-1);
case 0:
while(1){
printf("子进程(孤儿进程)id:%d\t父进程id:%d\n",getpid(),getppid());
sleep(1);
}
default:
printf("父进程id:%d\n",getpid());
exit(0);
}
return 0;
}
图形界面输出:
字符界面输出:
因为输出前面是中文,所以有一点乱码,但是不影响我们的目的(忽略忽略~~)