bashファイルから2つのCコードを並列に開始し、2番目のコードを最初に終了すると停止します。 命令待ちは、どちらのプロセスが停止しているかを期待していますが、これは私がしたいことではありません。 ありがとうございます。Bashファイル:並列処理を実行し、終了時に停止する
答えて
GNU parallelこの種のジョブを実行できます。 terminationセクションを確認し、それができ終了コード(成功または失敗のいずれかに基づいて、シャットダウンダウン残りのプロセス:ジョブがない場合は(仕事の一つが正常に終了すると、それは他のジョブにTERMシグナルを送信します
parallel -j2 --halt now,success=1 ::: 'cmd1 args' 'cmd2 args'
)それはKILLシグナルを使用して強制的に終了さ
ありがとうございます。私はGNUの並列20130922でこのコマンドを試しましたが、チュートリアルの次のリンクに示していますが、値は "now、success = 1"は無効です(期待される数値) – baptiste
バージョン* 20161222 *(Ubuntu 17.04 defaultバージョン)が動作します。この変更は[2015年中に]導入されたようです(http://git.savannah.gnu.org/cgit/parallel.git/commit/?id=8110572719461a6019b8f4c22d5ebf43f65cfbe6)。以前の形式のように見える* - halt -2 *を試してみてください。 –
さて、それは動作します。そして、最初のものが成功したときに停止するのではなく、最初のものが失敗したときに停止します。それから、コマンドの最後に私が最初に終わることを知っているエラーを導入しました。 – baptiste
wait -n
はあなたが探しているものです。次のジョブが完了するのを待ちます。残りのジョブのPIDのリストをjobs -p
としておくと、それらのジョブを強制終了できます。
prog1 & pids=($!)
prog2 & pids+=($!)
wait -n
kill "${pids[@]}"
これは、bash
を必要とします。
2つのプログラムはバックグラウンドジョブとして起動され、シェルは1つが終了するのを待ちます。
この場合、kill
が両方のプロセスを終了するために使用されます(どちらかがすでに停止しているため、エラーが発生します)。
を$!
を使用すると、並行して実行された最後のコマンドのPIDを取得し、ここでいくつかの素晴らしい例を参照してください:。。
を私はのようなものを想像します
#!/bin/bash
command_master() {
echo -e "Command_master"
sleep 1
}
command_tokill() {
echo -e "Command_tokill"
sleep 10
}
command_master & pid_master=($!)
command_tokill & pid_tokill=($!)
wait "$pid_master"
kill "$pid_tokill"
ありがとうございます。 killするプロセスは、Cコードです。これは、killされ、ファイルを閉じる時間があることを伝えたいと思います。基本的に、マスタからプロセスにシグナルを送信して、ループに入り、最終的な操作が終了するようにします。それは可能ですか? – baptiste
たとえば、マスタが終了したら、Cコードの最後のループに入るように、CファイルにrunMe.cをrunMe 1で送信します。 – baptiste
私はあなたの問題を理解しています。残念ながら、私は提案するクリーンなbashソリューションはありません。クリーンな解決策のためには、いくつかの同期を処理しなければならず、bashが本当に便利かどうかはわかりません。私の例では、例えば、以下のシナリオに対する保護はありません。「toKill」プロセスは、「マスター」プロセスの前に終了します。 "$ pid_master"待機中に、以前の "toKill"と同じPIDを持つ別のプロセスが起動すると、bash命令の "$ pid_tokill"は間違ったプロセスを強制終了します。 –
- 1. Vbaでフォームの終了イベント処理を停止する
- 2. ファイルの処理:コードが実行を停止します
- 3. キュウリシナリオ実行ごとにブラウザの終了と終了を停止する方法
- 4. ビルドフロープラグインとの並列処理が終了しない理由
- 5. Bash並列処理シミュレーションスクリプト
- 6. Twilioコールの終了時にKRLルールの実行が停止しますか?
- 7. 一時停止を追加してもcmdが終了する
- 8. ウェブページの開始/終了時にバウンスを停止する(OS X)
- 9. サイクルの終了時にアニメーションを停止する方法は?
- 10. アプリケーション終了時にサービスを停止する
- 11. フレーム終了時にjTimerを停止する
- 12. 終了時に私のTicTacToeゲームを停止する
- 13. 一時停止中にアンドロイドアプリケーションを終了する
- 14. 動的並列処理:親カーネルが終了した後に次のカーネルを実行
- 15. Python 2.7ですぐにスレッドの実行を停止する/終了する
- 16. オーディオの再生終了時にスライダが停止する
- 17. サブプロセスが処理を終了したら実行コード
- 18. sudoの停止スクリプトの終了を停止する
- 19. コンボボックスの終了を停止する
- 20. .netコンソールアプリケーションの終了を停止する
- 21. GNU並列:成功時の停止
- 22. 処理が既に実行されている場合はbashスクリプトを終了します
- 23. サービスを停止してアプリを終了
- 24. プログラムを終了するまでプロセスが一時停止中
- 25. setTimeoutが終了するまでjavascriptデータベースクエリを一時停止
- 26. 並行処理と並列処理 - 具体的にはC++で
- 27. AutoHotKey - ファイルのループが終了し、ファイルの終了後に停止します。変数を送信しません。
- 28. 即時非同期コードの実行が終了する前に停止します
- 29. 一時停止Bashループ
- 30. 終了せずにクラウドビルドエージェントを停止
どのように2番目のものを停止しますか? "殺す"と? –