我有一个分叉了一些子进程的主进程。
每个孩子都会做一些事情并阻止自己。SICHLD
通过阻塞自己,每个子进程都会向父进程发送信号。
我还在sigaction
主流程代码中声明了一个动作,以捕捉SIGCLHD
孩子们将发送的动作。
static struct sigaction action;
action.sa_handler = handler
sigfillset(&(action.sa_mask));
sigaction(SIGCHLD, &action, NULL);
处理程序在SIGCHLD
调用时检查哪个孩子发送了SIGCHLD
信号并为那个孩子做一些事情。
问题是,如果多个孩子同时发送信号会发生什么?假设孩子(1)发送了SIGCHLD
. 处理程序捕获它并且在他完成句柄之前,kid(2) 和kid(3) 都发送信号。处理程序是否会在处理完 child(1) 后针对每个信号运行,还是会忽略这些信号?