私は次のように私はシェルスクリプトから一括して起動するカップルのPythonスクリプトを持っている:ctrl + Cでシェルスクリプトによって開かれたすべてのプロセスを強制終了するには?
#!/bin/bash
python prog1.py &
python prog2.py &
python prog3.py
私は、多くの場合、これらのプロセスを停止したい開発していますので。私は通常、Ctrl + Cを押すことでそうしますが、残念なことに、いくつかのPythonプログラムは(ゼロ)ソケットを開いています。これは私が手動でそれらを見つける必要があることを意味します(私はlsof -iを使用します)、PIDを使用してそれらを削除します。
私はctrl + Cを押すとシェルからこれらの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!"
+1素敵な、私は、ジョブ制御と、この同じスクリプトを作成しようとかなり失望しましたbashは複数のジョブを指定する方法を提供しません。 'kill%?python'は理にかなっていました。 – kojiro
それは素晴らしいです!どうもありがとう!ちょうど質問。私はあなたのコードを以下のコードに最小化しました。これは同じように動作するようです。残りの部分は何ですか? #!/ bin/bash intexit(){kill -HUP - $$;出口; } trap intexit INT python prog2.py& python prog2.py& python prog3.py – kramer65
'hupexit'は素敵なメッセージを表示し、' wait'はコードがより一様に見えるようにしています。背景と待ち)。 – nneonneo