如何在ctrl + C下杀死shell脚本打开的所有进程?

kra*_*r65 10 bash

我有一些python脚本,我从shell脚本开始,如下所示:

#!/bin/bash
python prog1.py &
python prog2.py &
python prog3.py 
Run Code Online (Sandbox Code Playgroud)

自从我开发以来,我经常想要停止这些过程.我通常按​​ctrl + C这样做,但不幸的是有几个python程序保持(zeromq)套接字打开.这意味着我必须手动找到它们(我使用lsof -i),并使用PID 终止它们.

所以当我点击ctrl + C时,我正在寻找一种从shell自动杀死那些python进程的简单方法.在Stackoverflow上的另一个线程上,我发现了一些应该做我需要的代码.我只是对代码一无所知,以及如何根据我的需要调整代码.

有人帮我这么好吗?

cat >work.py <<'EOF'
import sys, time, signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
for i in range(10):
    time.sleep(1)
    print "Tick from", sys.argv[1]
EOF 
chmod +x work.py

function process {
    python ./work.py $1
}

process one &
wait $!
echo "All done!"
Run Code Online (Sandbox Code Playgroud)

nne*_*neo 14

让bash脚本捕获SIGINT,并让它杀死当前进程组中的所有内容:

intexit() {
    # Kill all subprocesses (all processes in the current process group)
    kill -HUP -$$
}

hupexit() {
    # HUP'd (probably by intexit)
    echo
    echo "Interrupted"
    exit
}

trap hupexit HUP
trap intexit INT

python prog1.py &
python prog2.py &
python prog3.py &

wait
Run Code Online (Sandbox Code Playgroud)