在 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 等待所有指定的(或者,如果没有指定,则只是所有)进程;您需要“任何”语义,而不是“全部”。
