1:孤儿进程
所谓孤儿进程,就是父进程在子进程前结束,导致子进程挂载到了别的进程之下(一般是1号进程),也有可能因为图形化界面优化,导致不是1号进程充当“孤儿院”。
因为我们无法确定,是子进程先执行还是父进程先执行,故,可以让子进程先睡1秒,跳过时间片
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(int argc, const char *argv[])
{
//融合召唤子进程
pid_t pid = fork();
//使用父进程
if(pid > 0)
{
printf("孤儿闪亮登场,这是父进程\n");
printf("父进程自身id:%d,子进程id:%d\n",getpid(), pid);
}
else
{
sleep(2); //睡两秒,父进程完成,变成孤儿
printf("I am 孤儿\n");
printf("子进程自身id:%d, 父进程:%d\n", getpid(), getppid());
}
return 0;
}
运行结果如下:
2:僵尸进程
因为子进程非正常结束,导致空壳占据了进程位置,无人”收尸“,故化作僵尸
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(int argc, const char *argv[])
{
pid_t pid = fork();
while(1)
{
if(pid == 0)
{
exit(0); //用exit结束子进程
}else
{
printf("这里是父进程,进程号:%d\n",getpid()); //用死循环保证父进程不结束
sleep(3);
}
}
return 0;
}
这个z+代表僵尸进程