题目:
让“父进程”可以有自己的工作,不需要因为为了“子进程”回收资源而堵塞。但也要满足“子进程”退出后的资源能被立马回收。(不能使用任何的进程通信机制 比如:信号等)
方法: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; }