11

次のように、シェルスクリプトからまとめて開始するPythonスクリプトがいくつかあります。

#!/bin/bash
python prog1.py &
python prog2.py &
python prog3.py 

私は開発しているので、これらのプロセスを停止したいことがよくあります。通常は ctrl+C を押してこれを行いますが、残念なことに、いくつかの python プログラムが (zeromq) ソケットを開いたままにします。これは、手動でそれらを見つけ (私はlsof -iを使用)、PID を使用してそれらを強制終了する必要があることを意味します。

そのため、ctrl+C を押したときにシェルからこれらの 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!"
4

1 に答える 1

15

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
于 2013-03-21T20:59:58.413 に答える