1、Single Unix Specification支持一個取得進程終止狀態的函數--waitid,此函數類似于waitpid:
? ? ? ?pid_t wait(int *status);
? ? ? ?pid_t waitpid(pid_t pid, int *status, int options);
? ? ? ?int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
2、wait3和wait4
? ? ? ?pid_t wait3(int *status, int options,struct rusage *rusage);
? ? ? ?pid_t wait4(pid_t pid, int *status, int options,struct rusage *rusage);
3、競爭條件
{pid_t pid;pid = fork();if(pid < 0){}else if(pid == 0)//一級子進程{pid = fork();{if(pid < 0){}else if(pid > 0)//一級子進程{exit(0);}//二級子進程,睡眠2秒后退出;也就是說二級子進程肯定會后面退出,變成孤兒進程sleep(2);printf("second child, parents");exit(0);}}if(waitpid(pid, NULL, 0) != pid){} //這個地方等待的pid算等待誰呢????exit(0);
}