我想在 Bash 中生成多个子进程,但我希望父脚本保持运行,这样发送到父脚本的信号也会影响生成的子进程。
这不会那样做:
parent.bash
:
#!/usr/bin/bash
spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &
parent.bash
立即结束,衍生进程继续独立运行。
最佳答案
如果您希望您的 parent 在生成其 child 后不立即退出,那么正如 Barmar 告诉您的那样,使用 wait
。
现在,如果您希望您的子进程在父进程退出时终止,那么在退出之前向它们发送一个 SIGTERM
(或任何其他)信号:
kill 0
(0是一个特殊的PID,表示“父进程组中的每个进程”)
如果父级可能意外退出(例如,由于 set -u
或 set -e
等,在收到信号时),那么您可以使用 trap
在退出前向 child 发送 TERM
信号:
trap 'kill 0' EXIT
[edit] 总之,这是你应该如何编写你的父进程:
#!/usr/bin/bash
trap 'kill 0' EXIT
...
spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &
...
wait
这样就不需要将您的信号发送到负进程 ID,因为这不会涵盖您的父进程可能死亡的所有情况。
关于Bash:生成在父脚本退出时退出的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66537526/