我想在 Bash 中生成多个子进程,但我希望父脚本保持运行,这样发送到父脚本的信号也会影响生成的子进程。
这不会这样做:
parent.bash
:
#!/usr/bin/bash
spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &
parent.bash
立即结束,并且生成的进程继续独立运行。
如果您希望父母在生成其孩子后不立即退出,那么正如 Barmar 告诉您的那样,请使用wait
.
现在,如果您希望子进程在父进程退出时终止,请向它们发送SIGTERM
(或任何其他)退出前的信号:
kill 0
(0是一个特殊的PID,表示“父进程组中的每个进程”)
如果父进程可能意外退出(例如,在收到信号后,由于set -u
or set -e
等)然后你可以使用trap
发送TERM
在退出前向孩子发出信号:
trap 'kill 0' EXIT
[编辑] 总之,这就是你应该如何编写父进程:
#!/usr/bin/bash
trap 'kill 0' EXIT
...
spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &
...
wait
这样就不需要将信号发送到负进程 ID,因为这不会涵盖父进程可能死亡的所有情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)