没有传递Linux信号

没有传递Linux信号,linux,signals,Linux,Signals,我有一些PHP守护进程会丢失一些信号。例如,他们应该每分钟接收一次ALRM信号来保存他们的统计数据,然后他们会停止接收有时他们没有接收到的术语信号。我一直认为这是PHP的怪异之处,我有一些解决办法,例如,如果我的守护进程不想停止,stopper进程会重新发送术语信号。但现在我有了这个perl Net::Server::HTTP(带PreFork)守护进程,每隔一段时间它的一个工作进程就会被卡住,/proc/X/wchan总是显示“sk_wait_data”,如果我手动向它们发送ALRM信号,它们

我有一些PHP守护进程会丢失一些信号。例如,他们应该每分钟接收一次ALRM信号来保存他们的统计数据,然后他们会停止接收有时他们没有接收到的术语信号。我一直认为这是PHP的怪异之处,我有一些解决办法,例如,如果我的守护进程不想停止,stopper进程会重新发送术语信号。但现在我有了这个perl Net::Server::HTTP(带PreFork)守护进程,每隔一段时间它的一个工作进程就会被卡住,/proc/X/wchan总是显示“sk_wait_data”,如果我手动向它们发送ALRM信号,它们就会做出反应,就像套接字读取超时的ALRM信号丢失一样。您还应该知道,我所有其他类似的Net::Server服务器都不会卡住,我不知道有什么区别。此外,这种情况和PHP信号丢失的情况非常罕见,比如每隔几周就会发生一次。

请添加发出信号的代码和处理程序。线程通常会弄乱信号。在Linux中,可以向线程或进程发送信号。如果对进程进行访问,它可能由任何线程处理。PHP通常避免线程,但我不知道您的配置。关于信号,您可能需要知道的另一件事是,除非它们是排队的实时信号,否则它们可以合并。这意味着,如果两个SIGALRM信号在同一时间段内发生(由内核决定),则只有一个信号将被传递到进程。@ZanLynx我不使用线程,并且查看/proc PHP本身没有启动任何信号,但这并不意味着它永远不会启动,我将如何验证这一点?它应该在phpinfo()中说些什么吗?