私はいくつかの重い処理を行う必要のある大きなファイル群を持っています。 このシングルスレッド処理では、数百MiBのRAM(ジョブの開始に使用されたマシン上)が使用され、実行には数分かかります。 私の現在のusecaseは、入力データに対してhadoopジョブを開始することですが、これまでにも同じ問題がありました。限られた数の子プロセスをbashで並列に実行していますか?
利用可能なCPUパワーを完全に利用するために、私はパラレルで複数のタスクを実行できるようにしたいと考えています。
は、しかし、このような非常に簡単なシェルスクリプトの例は、過剰な負荷やスワッピングにシステムパフォーマンスをゴミ箱ます:find . -type f | while read name ;
do
some_heavy_processing_command ${name} &
done
だから私が欲しいもの「にgmake -j4」何に本質的に類似しています。
bashは "wait"コマンドをサポートしていますが、すべての子プロセスが完了するまで待機することがわかります。過去に私は 'ps'コマンドを実行し、子プロセスを名前でgrepするスクリプトを作成しました(はい、私は知っています...醜いです)。
私がしたいことをするための最も簡単できれいな解決策は何ですか?
編集:フレデリックのおかげ:はい確かにこれはHow to limit number of threads/sub-processes used in a function in bash の複製である "xargsの--max-procsの= 4" は、魔法のように動作します。 (だから私は自分の質問を閉じるために投票)
私は 'xargsのを使用したいhttp://stackoverflow.com/questions/6511884/how-to-limit-number-of-threads-used-in-a-function-in-bashの可能重複--max-procs = 4'これに対して... –
それは[GNU並列](http://www.gnu.org/software/parallel/)の仕事のようですが、余分なものが追加されているのか分かりません私が知らなかった 'xargs --max-procs'への力。 – larsen
@Niels:私は目的のために' screen'を使っていましたが、これはちょっと面倒ですが、特に別の 'screen'セッション); – 0xC0000022L