信号处理程序

时间:2017-06-20 23:00:48

标签: linux kernel signals handler interprocess

我有3个不相关的进程同时运行( 2个守护程序进程在后台运行 1个主进程在前台运行)。

我在其中一个守护程序进程中为SIGUSR1创建了信号处理程序,其他进程正在尝试使用kill(pid,SIGUSR1)发送信号。

当我发送一个信号时,它工作正常。当我以这种方式发送它时,它也可以正常工作:

kill(pid,SIGUSR1);

睡眠(5);

kill(pid,SIGUSR1);

睡眠(5);

kill(pid,SIGUSR1);

睡眠(5);

这很好用,信号处理程序执行三次,我在syslog上监视。

但是当我移除睡眠并一个接一个地直接发送它们时,信号处理程序应该被执行三次(理想情况下),但它只执行一次或两次。。如果我多次向后发送相同的信号,则无法执行信号处理程序。

理想情况下,它应该进入待处理信号并在当前处理程序执行完成后执行。我还读过如果多次发送相同的信号,那么它会忽略多个实例,所以有一种方法可以一个接一个地执行所有实例而不是忽略它们。

我有什么遗漏或错误吗?

我需要这种执行才能工作,因为会有多个进程将SIGUSR1信号发送到一个特定的守护程序进程,所以我试图在没有任何睡眠的情况下运行。

感谢您的帮助

0 个答案:

没有答案