我有一些python脚本,我从shell脚本开始,如下所示:
#!/bin/bash
python prog1.py &
python prog2.py &
python prog3.py
由于我正在开发,我经常想要停止这些过程。我通常按ctrl + C这样做,但不幸的是有几个python程序保持(zeromq)套接字打开。这意味着我必须手动找到它们(我使用 lsof -i ),并使用PID终止它们。
所以当我点击ctrl + C时,我正在寻找一种更简单的方法来自动从shell中杀死那些python进程。在another thread here on 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!"
答案 0 :(得分: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