gpt4 book ai didi

signals - 使用 supervisord 将信号传递到托管进程

转载 作者:行者123 更新时间:2023-12-04 23:32:10 24 4
gpt4 key购买 nike

我正在使用 supervisord 来生成和管理我用 C 为 Linux 目标编写的 FastCGI 应用程序。我有一个信号处理程序,可以在收到 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)

我的 supervisord.conf 文件中有以下内容
stopsignal=INT

我假设 supervisord 在调用关闭命令时发出“停止信号”,因此我将 INFO 语句视为我的应用程序没有响应 supervisord 发出的 SIGINT 的指示。

如何调试在 supervisord 和我的应用程序之间传递的信号?

最佳答案

经过更多的挖掘,似乎问题不在于 supervisord 未能将信号传递给子进程。这似乎工作正常。

相反,一旦收到调用 stopsignal 的请求,supervisord 就会停止记录子进程 ​​stderr 的输出。因此,supervisord 不会处理任何基于 stderr 的子进程关闭日志记录。就我而言,这使得子进程似乎没有收到 SIGINT,因为在调用信号后它没有将任何内容记录到 stderr。

关于signals - 使用 supervisord 将信号传递到托管进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3533371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com