1.创建一个孤儿进程
父进程如果不等待子进程退出,在子进程之前就结束了自己的“生命”,此时子进程就叫做孤儿进程。
Linux避免系统存在过多孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
pid_t pid = fork();
if(pid > 0)
{
printf("is parent getpid:%d child:%d\n",getpid(),pid);
}
else if(0 == pid)
{
sleep(1);
while(1)
{
sleep(1);
printf("is child:%d parent:%d\n",getpid(),getppid());
}
}
else
{
perror("fork");
return -1;
}
return 0;
}
2.创建一个僵尸进程
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程、释放子进程占用的资源,此时子进程将成为一个僵尸进程。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
pid_t pid = fork();
if(pid > 0)
{
sleep(1);
printf("is parent getpid:%d child:%d\n",getpid(),pid);
while(1)
sleep(1);
}
else if(0 == pid)
{
printf("is child:%d parent:%d\n",getpid(),getppid());
}
else
{
perror("fork");
return -1;
}
return 0;
}