2017-07-17 8 views
2

私は parallel -a my_scripts bash のようなシェルスクリプトを実行しています。私はそれらを十分に実行したと判断して、新しいジョブの生成を止め、既存のすべてのジョブを終了させることにしました。別の言い方をすれば、子供を殺さずに親プロセスを殺したいと思う。実行中のジョブを強制終了せずにGNU並列を終了するにはどうすればよいですか?

あり(私が事前にわかっている場合たとえば、私が唯一、私は--halt now,success=x引数を使用することができ、xジョブを実行したい)ways of controlling termination when first launching GNU parallelのようですが、私はそれがすでに実行されているとき、GNU平行を制御する方法を見つけることができませんでした。

確かに私はCTRL+Cを使って並列処理をやめ、中断されたジョブを再実行することができますが、よりスマートな方法があると思いました。

+1

** GNU並列**で実行する方法があるかもしれませんが、Redisをこのように使用する方法もあります。https://stackoverflow.com/a/22220082/2836621 –

+0

**タスクスプーラー**は別の可能性があります... http://www.ubuntugeek.com/task-spooler-personal-job-scheduler.html –

答えて

4

私はそれを理解しました。答えは、単にSIGTERMを親のparallelプロセスに送信することです(ちょうどkillのPIDが行うことになります)。 parallelは、(私が実行している4つのジョブを持っているこの場合は)次のように応答します。私は、manページからそれを掘っ

COMPLETE RUNNINGジョブが、新しいJOBS
を起動しないでください 多くのジョブを開始したことを後悔した場合は、単にGNU並列を破ることができますが、 に半分完了したジョブがないことを確認したい場合は、 シグナルSIGTERMをGNU parallel:

のkillall -TERM並列

これは、新しいジョブを開始しないように並列GNUを伝えるが、現在実行中のジョブが終了する前に終了するまで をお待ちしております。

+0

SIGTERMはSIGKILLと大きく異なります。あなたの答えを修正してください。 SIGKILLはあなたが望むことをしません。 –

+0

申し訳ありませんが誤植;固定 –

+1

どのように文書化されているのかをご存知の方はお知らせください。より簡単に見つけることができました。 –

関連する問題