我有一个简单的脚本,它在后台运行几个进程,然后wait
s让它们完成:
#!/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/