fork():创建子进程,并返回进程id。
wait(&status):等待子进程终止。如果成功则会返回僵尸子进程的pid,status的值会是子进程的exitcode。
exit(value):进程正常退出,并返回退出值value
prctl(PR_SET_CHILD_SUBREAPER):设置当前进程为subreaper进程。
零、示例代码即可能的输出结果
目录
#include <stdio.h>
#include <unistd.h>
#include <wait.h>
#include <sys/prctl.h>
int main(){
int pid ,r,status ;
printf("mark process %d as a subreaper\n",getpid());
r=prctl(PR_SET_CHILD_SUBREAPER);
pid = fork();
if(pid){
//parent
printf("subreaper %d child =%d\n",getpid(),pid);
while(1){
pid =wait(&status);
if(pid >0){
printf("subreaper %d wait a ZOMBIE=%d\n",getpid(),pid);
}else{
break;
}
}
}else{
//child
printf("child %d parent=%d\n",getpid(),(pid_t)getppid());