Skip to main content
 首页 » 编程设计

python之在后台启动程序,并在其中一个程序因退出代码而死亡时立即将其杀死

2025年05月04日12sxdcgaq8080

在 Linux 上,我想产生一些服务器作为后台服务。

一旦其中一个以退出代码 != 0 终止,它们将所有 被 SIGTERMed,并且在 3 秒宽限期后如果它们不这样做则被杀死'想去。

按下 Ctrl-C 时也会发生同样的情况。

我想要一个粗略的等价物

set -e 
server1 & 
server2 & 
server3 & 
wait (+ kill on error) 

(不幸的是,上面的代码不具有所有提到的属性。)

child 不得窃取/逃避 Ctrl-C 信号。

我接受 Bash 和 Python 的解决方案(使用 subprocess)。对于 Python,他们可能只使用标准库函数(我不必先使用 pip 下载模块)。如果您有用另一种语言执行此操作的绝妙方法,请毫不犹豫地展示它。

如果它也能在 Mac OS 上运行,则加分。

请您参考如下方法:

我不会为您编写解决方案,而是建议您去哪里查找:setpgrp、waitpid、kill。请注意,“ child 不可能窃取/逃避 Ctrl-C 信号。”既不可能(唯一无法规避的信号是 SIGSTOP 和 SIGKILL)也没有意义(您没有向它们传递 SIGINT)。

您不能在 bash 中正确执行此操作,因为 wait 等待所有指定的(或者,如果没有指定,则只是所有)进程;您需要“任何”语义,而不是“全部”。