2016-07-28 25 views
0

質問が何度も尋ねられていないことを願っていますが、私はGoogleで答えを見つけることができませんでした(私はそれを指定する方法を知らなかった)。同時コマンドを実行して終了すると終了する

誰かがbashで2つの並列コマンドを実行する方法を知っていますか?一方が終了したら、もう一方は終了しますか?例えば

、私は2つの異なるPythonスクリプトがあります:私はpython3 loop.py ** python3 print.pyような何かをしたいと思いますprint.py

  • while 1: pass:loop.py
  • print(42)を。 2つのスクリプトは並列に実行する必要があり、印刷が終了するとループは自動的に終了します。そのコマンドの

    私の使い方は何かなどを作るために次のようになります。

    tcpdump -i any -w out.trace ** python3 network_script.py 
    

    は何をしたい事前

+1

を '&&'それらを並行して実行されません。最初のものが0の終了ステータスを持っている場合は、最初のものを実行し、次に2番目のものを実行します。 – chepner

+0

私の投稿を編集します。 –

答えて

1

にありがとう

tcpdump ... & pid=$! 
python3 network_script.py 
kill $pid 

は、バックグラウンドでの最初のスクリプトを実行しています、 2番目のスクリプトを開始します。 2番目のスクリプトが終了したら、最初のスクリプトを終了します。

+0

うわー、すばらしい答え:) シェル変数$! (最後に実行されたコマンドのPID)は間違いなく必要なものでした。 –

0

最善の解決策ではありませんが、後で&のバックグラウンドでプロセスを開始してから、waitを実行してプロセスを開始することができます。

これらのプロセスのそれぞれは、完了時に他のすべてのプロセスを強制終了する必要があります。

それは次のようになります。

(python loop.py && killall Python) & 
(python print.py && killall Python) & 
wait 
echo "Done with at least one!" 
+1

'killall Python'はこれらの2つの' python'プロセスに制限されることはありません。 – chepner

+0

はい、それはあなたのすべてのあなたのpythonプロセスを殺します:Dしかしおそらくあなたは何も持っていません。 – fafl

関連する問題