我的程序上有一个 SIGCHLD 处理程序,它可以收获僵尸进程。
如何避免在代码中执行多个fork((调用和waitpid((调用的代码部分中调用SIGCHLD处理程序?
因为现在,当我进行 fork(( 调用并且孩子完成执行时,它会返回一个 SIGCHLD 信号,因此它调用了 SIGCHLD 处理程序,但我想在代码的那部分而不是在处理程序中收获进程?
我该怎么做?阻断 SIGCHLD 信号?
试试这个:
sigemptyset(&set);
sigaddset(&set, SIGCHLD);
s = pthread_sigmask(SIG_BLOCK, &set, NULL);
稍后,当您完成此操作时,请使用 SIG_UNBLOCK 取消阻止 sig 处理程序。