shell脚本中的后台函数没有被杀死

时间:2016-07-14 21:24:40

标签: bash background-process kill

首先,我想说我已经在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?

linux: kill background task

1 个答案:

答案 0 :(得分:0)

您需要终止整个流程组:

killall () {
    PID=$$
    kill -9 -$(ps -o pgid= $PID | grep -o '[0-9]*')
}

trap killall EXIT

# ...launch some child processes...

wait

Best way to kill all child processes