我有两个处理程序(SIGTSTP,SIGCHLD),事情是当我用SIGTSTP暂停一个进程时,SIGCHLD的处理函数也运行了。我该怎么做才能防止这种情况发生。
SIGTSTP和SIGCHLD之间有什么关系
信号处理程序:
void signalHandler(int signal) {
int pid, cstatus;
if (signal == SIGCHLD) {
susp = 0;
pid = waitpid(-1, &cstatus, WNOHANG);
printf("[[child %d terminated]]\n", pid);
DelPID(&JobsList, pid);
}
}
void ctrlZsignal(int signal){
kill(Susp_Bg_Pid, SIGTSTP);
susp = 0;
printf("\nchild %d suspended\n", Susp_Bg_Pid);
}
Susp_Bg_Pid用于保存暂停进程ID。
susp表示如果该进程被暂停或停止,则“粉碎”父进程的状态。
看来,用正确的标志,你可以告诉哪个孩子被暂停,以及它收到了哪个信号。所以这不仅可以让你检测到实际的退出,还可以采取一些行动来暂停/恢复。 –