|
比如主程序A有两个子程序B和C;
在A主程序退出时要先发送SIGTERM给C,让它做稍长时间的清理(期间还要和用unix domain socket和B通信)然后退出,最后发送SIGTERM给B让它退出;
我现在是这样做的:
在A主程序中捕捉SIGTERM和SIGCHLD,并且通过全局变量C_proc_exited来判断C有没有已经退出;
对SIGCHLD信号的处理函数:
- void child_exit(int sig) {
- int pid;
- while((pid = waitpid(-1,0,WNOHANG)) > 0) {
- if(pid == C_proc_id)
- C_proc_exited = 1;
- }
- return;
- }
复制代码
对SIGTERM信号的处理函数:
- void program_exit(int sig) {
- kill(C_proc_id,SIGTERM);
- while(!C_proc_exited) {
- sleep(1);
- }
- kill(B_proc_id,SIGTERM);
- exit(0);
- }
复制代码
看起来应该没有什么问题,但是用在自己的程序中发现有时还是B比C先退出,可能有些不可靠的地方;
有谁有更好的办法来控制多个程序的退出顺序 |
|