C编程-在信号处理器中计数信号

C编程-在信号处理器中计数信号,c,linux,signals,C,Linux,Signals,我正在用C语言编程处理信号。我有父进程和5个子进程,当父进程使用SIGSSUSPEND()等待它们进行计算时,我试图将SIGUSR2从子进程发送到父进程。当所有5个子进程发送SIGUSR2时,父进程继续其工作。为此,我在信号处理器函数中增加一个全局变量。有时它运行正常,但有时父进程会在等待时卡住 你们中有谁能帮我找到一个更好的解决方法,而不是计算接收到的信号(我必须使用信号进行同步)?据我所知,你不能使用信号进行同步。如果在一个进程被安排处理第一个信号之前向它发送了两个相同类型的信号,那么它将只

我正在用C语言编程处理信号。我有父进程和5个子进程,当父进程使用SIGSSUSPEND()等待它们进行计算时,我试图将SIGUSR2从子进程发送到父进程。当所有5个子进程发送SIGUSR2时,父进程继续其工作。为此,我在信号处理器函数中增加一个全局变量。有时它运行正常,但有时父进程会在等待时卡住


你们中有谁能帮我找到一个更好的解决方法,而不是计算接收到的信号(我必须使用信号进行同步)?

据我所知,你不能使用信号进行同步。如果在一个进程被安排处理第一个信号之前向它发送了两个相同类型的信号,那么它将只看到一个信号。将其视为位掩码,每个待处理信号有一个位,当进程被调度时,它将接收所有这些位。但是如果它正在等待其他进程,并且掩码中的位已经设置好了,那么就不会再发生任何事情


更好的解决方案可能是打开到每个子流程的管道,每个子流程完成后都会编写一条消息。当父级已从所有子级读取消息时,它可以继续。还有其他同步方法,但这可能是最简单的。

请提供一些代码为什么要这样做?使用
wait
(或
waitpid
)代替。因为这是一个家庭作业@williampersell。实时信号是排队的,但是,是的,不是像
SIGUSR2
这样的常规信号。没错,很好。好奇者:有关所有详细信息,请参见
MAN7信号。