簡體   English   中英

如何在ctrl + C下殺死shell腳本打開的所有進程?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM