Bash:产生当父脚本退出时退出的子进程

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立即结束,并且生成的进程继续独立运行。

xhi*_*nne 7

如果您希望父母在生成其孩子后不立即退出,那么正如 Barmar 告诉您的那样,请使用wait.

现在,如果您希望子进程在父进程退出时终止,请SIGTERM在退出之前向它们发送一个(或任何其他)信号:

kill 0
Run Code Online (Sandbox Code Playgroud)

(0是一个特殊的PID,表示“父进程组中的每个进程”)

如果父进程可能意外退出(例如,由于 aset -uset -e等而收到信号时),那么您可以在退出之前trap将信号发送TERM给子进程:

trap 'kill 0' EXIT
Run Code Online (Sandbox Code Playgroud)

[编辑] 总之,这就是您应该如何编写父进程的方式:

kill 0
Run Code Online (Sandbox Code Playgroud)

这样就不需要将信号发送到负进程 ID,因为这不会涵盖父进程可能死亡的所有情况。