隐式终止连接到前台进程的后台进程

Implicitly kill background processes connected to a foreground process

在 Bash 中,我在后台启动了一些进程 运行 并让 Bash 在前台等待:

sleep 7 & sleep 10 & wait

(这实际上是npm script所做的简化,也就是本题的应用。)

然后,每当我 Ctrl+C 退出 wait 进程时,我希望所有后台进程都被杀死。

这可能吗?怎么样?

后台进程是 shell 的子进程,但不是 wait 的子进程,因此没有好的方法将信号传播到 wait其他进程。

杀死所有后台进程的一种快速但肮脏的方法是

kill -INT $(jobs -l | awk '{print }')

kill -INT $(jobs -p)