当子进程结束时,它会向父进程发送SIG_CHLD信号,然后父进程使用wait waitpid waittid函数来捕获某一子进程的退出状态。当需要等待所有子进程全部退出时,我们可以设置SIG_CHLD为SIG_IGN,然后使用wait来阻塞直到所有子进程全部退出:
- int main()
- {
- signal(SIGCHLD, SIG_IGN);
- pid_t pid1;
- if((pid1 = fork()) == 0)
- {
- sleep(3);
- std::cout<<"child 1 exit."<<std::endl;
- exit(0);
- }
- pid_t pid2;
- if((pid2 = fork()) == 0)
- {
- sleep(5);
- std::cout<<"child 2 exit."<<std::endl;
- exit(0);
- }
- wait(NULL);
- std::cout<<"parent exit."<<std::endl;
- }