Bash:生成在父脚本退出时退出的子进程

标签 bash child-process spawn spawning

我想在 Bash 中生成多个子进程,但我希望父脚本保持运行,这样发送到父脚本的信号也会影响生成的子进程。

这不会那样做:

parent.bash:

#!/usr/bin/bash

spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &

parent.bash 立即结束,衍生进程继续独立运行。

最佳答案

如果您希望您的 parent 在生成其 child 后不立即退出,那么正如 Barmar 告诉您的那样,使用 wait

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

kill 0

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

如果父级可能意外退出(例如,由于 set -uset -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/

相关文章:

node.js - NodeJS : how to run spawn in parallel properly?

node.js child_process 生成忽略等号

bash 删除文件名的一部分

bash - 删除超过 30% 小写字母的行

c - C语言如何传递输入和检索输出到子进程

python - Node.js child_process.spawn 无法启动 python 进程

node.js - 如何禁用nodejs ChildProcess.spawn stdout 缓冲区?

linux - 确定 linux 系统上每个唯一的进程所有者

bash - 在bash脚本中使用docker exec

node.js - Node child_process 中的奇怪管道行为?