信号 – 使用supervisord传递给托管进程的信号
发布时间:2020-12-14 00:02:57 所属栏目:Linux 来源:网络整理
导读:我正在使用supervisord来生成和管理我在C语言中为 linux目标编写的FastCGI应用程序.我有一个信号处理程序,在收到SIGINT时正常退出我的应用程序.我已经通过在终端窗口中运行应用程序并发出Ctrl-C退出来验证信号处理程序是否正常工作. 向supervisord发出“shut
我正在使用supervisord来生成和管理我在C语言中为
linux目标编写的FastCGI应用程序.我有一个信号处理程序,在收到SIGINT时正常退出我的应用程序.我已经通过在终端窗口中运行应用程序并发出Ctrl-C退出来验证信号处理程序是否正常工作.
向supervisord发出“shutdown”命令(通过supervisorctl)时,似乎supervisord无法强制应用退出而不调用SIGKILL: 2010-08-20 10:02:49,661 INFO waiting for cse to die 2010-08-20 10:02:52,665 INFO waiting for cse to die 2010-08-20 10:02:55,669 INFO waiting for cse to die 2010-08-20 10:02:58,672 INFO waiting for cse to die 2010-08-20 10:02:59,673 WARN killing 'cse' (2031) with SIGKILL 2010-08-20 10:02:59,674 INFO stopped: cse (terminated by SIGKILL) 我在supervisord.conf文件中有以下内容 stopsignal=INT 我的假设是supervisord在调用shutdown命令时发出“stopsignal”,因此我将INFO语句作为我的应用程序没有响应supervisord发出的SIGINT的指示. 如何调试在supervisord和我的应用程序之间传递的信号? 解决方法
在进行了一些挖掘之后,似乎问题不在于supervisord未能将信号传递给子进程.这似乎正常.
相反,一旦收到调用stopignal的请求,supervisord似乎停止记录子进程stderr输出.因此,supervisord不会处理子进程关闭的任何基于stderr的日志记录.在我的例子中,这使得子进程看起来没有接收到SIGINT,因为在调用信号之后它没有向stderr记录任何东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |