0

环境:

我有一个 python 服务器,它分成 3 个孩子。

对于家长:

  • SIGTERM 应该杀死所有孩子,而 SIGHUP 应该记录并存在

对于孩子:

  • SIGTERM 和 SIGHUP 都映射到 SIG_DFL

问题:

当我通过命令行启动脚本python <script.py>并将 SIGHUP 发送给父级kill -1 <pid-of-parent>时,它表现良好。只有在完成 I/O 后,父进程才会退出,而忙碌的子进程才会退出。

但是,如果使用 systemd 脚本启动相同的脚本,当我向父级发送 SIGHUP 时,仍然忙碌的子级会收到一个 SIGTERM 并导致 I/O 中断。

对此有任何解释/解决方案吗?是不是配置错误?

4

1 回答 1

0

似乎您需要将KillModesystemd 服务设置为process.

KillMode ... 指定如何杀死该单元的进程。...如果设置为控制组,则该单元的控制组中的所有剩余进程将在单元停止时被杀死...如果设置为进程,则只有主进程本身被杀死...默认为控制组

更多信息:https ://www.freedesktop.org/software/systemd/man/systemd.kill.html#

如果您以这种方式生成进程,另一种方法是设置creationflags为调用subprocess.CREATE_NEW_PROCESS_GROUP中。subprocess.Popen

于 2016-03-15T17:09:51.277 回答