我对 SIGCHLD 处理程序函数有以下问题。
处理程序代码非常简单:
void sigchld_handler(int signum)
{
pid_t ended;
signal(SIGCHLD, sigchld_handler);
ended = wait(NULL);
// do some stuff with the PID of the finished child process
}
当我只分叉一个孩子时,这很有效。如果我有 2 个孩子(或更多)并且其中一个已经完成运行,则 sigchld_handler() 将启动,当它到达“end = wait(NULL)”行时,程序会一直等到我拥有的另一个孩子完成。
有没有办法获得刚刚以不同方式结束的孩子的 PID 并避免这种等待?