加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

信号 – 使用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记录任何东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读