信号通过主管传递到托管流程
-
30-09-2019 - |
题
我正在使用Substisord来产生和管理我在C中为Linux目标编写的FASTCGI应用程序。我有一个信号处理程序,可以在收到Sigint时优雅地退出我的应用程序。我已经验证了信号处理程序通过在终端窗口中运行该应用程序并发出CTRL-C以退出的方式来工作。
在向Subersisord(通过SubsecorCtl)发出“关闭”命令时,看来Subersisord无法强迫该应用程序退出而不调用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)
我在我的subsisord.conf文件中有以下内容
stopsignal=INT
我的假设是,主管在关闭命令的调用中“停止信号”,因此我将信息声明视为指示我的应用程序没有响应主管发出的sigint。
我该如何调试主管和我的应用程序之间传递的信号?
解决方案 2
经过更多的挖掘,看来问题并不是主管未能将信号传递给儿童流程。这似乎正常工作。
相反,看来Substisord在收到调用stopsignal的请求后停止记录子进程STDERR输出。结果,主管不会处理任何基于STDER的儿童过程关闭的日志记录。就我而言,这似乎使孩子的过程没有收到Sigint,因为调用信号后没有记录任何stderr。
其他提示
您可以在调试模式下在命令行上运行主管并获取更多信息。
主管-n -e调试
根据此提交,这是一个错误在主管的3.0A10(2011-03-30)中固定的错误: https://github.com/supervisor/supervisor/commit/e19cbc185dfad045c87775757575750d36ab8ceed4c4c4c4dfb
不隶属于 StackOverflow