【发布时间】:2013-11-09 21:48:26
【问题描述】:
我对它们中的每一个都有两个处理程序(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 表示父进程是否被挂起时“粉碎”的状态。
【问题讨论】:
-
看来,使用正确的标志,您可以知道哪个孩子暂停了,以及它收到了哪个信号。因此,这不仅可以让您检测到实际退出,还可以对暂停/恢复采取一些措施。
标签: c linux signals posix sigchld