首先,我想说我已经在web / stackoverflow中彻底搜索了我的问题的解决方案..
我有以下shell脚本方案:
#!/bin/bash
{
while :
do
echo "running"
sleep 2
done
}&
procid=$!
echo $procid
trap "kill -15 $procid" 2 15
即使在用Ctrl-C中断过程后,后台进程仍在打印"正在运行"在提示。 我使用" kill -9 PID"从终端终止后台进程,其中PID是后台进程的进程ID。我试过没有& (不在后台运行)并且脚本使用Ctrl-C很好地终止。
这些问题的解决方案在这些链接中提出,但是它没有按预期工作(后台进程没有被杀死)。 我提到了这些链接:
How do I kill background processes / jobs when my shell script exits?
答案 0 :(得分:0)
您需要终止整个流程组:
killall () {
PID=$$
kill -9 -$(ps -o pgid= $PID | grep -o '[0-9]*')
}
trap killall EXIT
# ...launch some child processes...
wait