Hik*_*ast 5 signals sigkill sigint supervisord
我正在使用 supervisord 来生成和管理一个 FastCGI 应用程序,我正在用 C 为 Linux 目标编写该应用程序。我有一个信号处理程序,可以在收到 SIGINT 时优雅地退出我的应用程序。我已经通过在终端窗口中运行应用程序并发出 Ctrl-C 退出来验证信号处理程序是否按预期工作。
当向 supervisord 发出“关闭”命令(通过 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)
Run Code Online (Sandbox Code Playgroud)
我的 supervisord.conf 文件中有以下内容
stopsignal=INT
Run Code Online (Sandbox Code Playgroud)
我假设 supervisord 在调用关闭命令时发出“停止信号”,因此我将 INFO 语句视为我的应用程序没有响应由 supervisord 发出的 SIGINT 的指示。
如何调试在 supervisord 和我的应用程序之间传递的信号?
经过更多的挖掘,似乎问题不在于 supervisord 未能将信号传递给子进程。这似乎工作正常。
相反,一旦收到调用 stopsignal 的请求,supervisord 就会停止记录子进程的 stderr 输出。因此,supervisord 不会处理任何基于 stderr 的子进程关闭日志记录。就我而言,这使得子进程似乎没有收到 SIGINT,因为在调用信号后它没有将任何内容记录到 stderr。
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |