[英]How to kill all processes that were opened by a shell script upon ctrl + C?
我有一些python腳本,我從shell腳本開始,如下所示:
#!/bin/bash
python prog1.py &
python prog2.py &
python prog3.py
自從我開發以來,我經常想要停止這些過程。 我通常按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!"
讓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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.