我有一个简单的脚本,它在后台运行几个进程,然后waits让它们完成:

#!/usr/bin/env bash

sleep 100 &
sleep 200 &

wait

但是,当我运行该脚本并杀死它时,这两个后台进程将继续运行。有没有办法等待它们完成,如果炮弹被杀死也会杀死它们?

最佳答案

您可以调用一个函数,该函数将在父进程退出时调用,使用pkill

#!/usr/bin/env bash

# this function will be called when main script exits
killall() {
   # echo "killing all child process of parenr pid $$"
   pkill -TERM -P $$
}
# set trap function on exit
trap killall exit

sleep 100 &
sleep 200 &

wait

现在,当按trap或终止父脚本时,将执行ctrl-C

关于linux - 使用'&'和'wait'时后台进程不会消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49834424/

10-14 19:44