Ger*_*mia 3 bash spawning spawn child-process
我想在 Bash 中生成多个子进程,但我希望父脚本保持运行,这样发送到父脚本的信号也会影响生成的子进程。
这不会这样做:
parent.bash
:
#!/usr/bin/bash
spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &
Run Code Online (Sandbox Code Playgroud)
parent.bash
立即结束,并且生成的进程继续独立运行。
如果您希望父母在生成其孩子后不立即退出,那么正如 Barmar 告诉您的那样,请使用wait
.
现在,如果您希望子进程在父进程退出时终止,请SIGTERM
在退出之前向它们发送一个(或任何其他)信号:
kill 0
Run Code Online (Sandbox Code Playgroud)
(0是一个特殊的PID,表示“父进程组中的每个进程”)
如果父进程可能意外退出(例如,由于 aset -u
或set -e
等而收到信号时),那么您可以在退出之前trap
将信号发送TERM
给子进程:
trap 'kill 0' EXIT
Run Code Online (Sandbox Code Playgroud)
[编辑] 总之,这就是您应该如何编写父进程的方式:
kill 0
Run Code Online (Sandbox Code Playgroud)
这样就不需要将信号发送到负进程 ID,因为这不会涵盖父进程可能死亡的所有情况。