题目:
让“父进程”可以有自己的工作,不需要因为为了“子进程”回收资源而堵塞。但也要满足“子进程”退出后的资源能被立马回收。(不能使用任何的进程通信机制 比如:信号等)
方法:fork两次
代码:
#include <stdio.h>
#include <signal.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main()
{
pid_t ret = fork();
if (ret == -1)
{
perror("fork");
exit(-1);
}
else if (ret == 0)
{
pid_t pid = fork();
if (pid == -1)
{
perror("fork");
exit(-1);
}
else if (pid == 0)
{
printf("我是孙进程,init进程给我收尸\n"); //继父会给他收尸
sleep(1);
exit(0);
}
else
{
exit(0); //直接死掉
}
}
else
{
int r = wait(NULL); //给子进程收尸
while (1)
{
sleep(1);
printf("我是父进程,我的id号为:%d,我的子进程id号为%d 我活动自由\n", getpid(), r);
}
}
return 0;
}