14

実行したいコマンドラインを含むファイルがあります。このファイルには約 2,000 行が含まれています。

利用可能なコアは 8 つあります。ファイルを解析して 8 つのプロセスを開始し、プログラムの 1 つが終了するたびにファイルから別のプロセスを実行することは可能ですか? ファイルの終わりに達するまでこれを続けたい。

4

3 に答える 3

39

GNU 並列を使用します。これは信じられないほど強力なツールであり、約 20 ほどの Linux ディストリビューション用の公式パッケージが存在します。あれは何でしょう?使えないという言い訳はありますか?コマンドのリストまたはファイルを並行して実行する方法を示す簡単な例を次に示します。

の内容jobs.txt:

sleep 1; echo "a"
sleep 3; echo "b"
sleep 2; echo "c"

指示:

time parallel :::: jobs.txt

結果:

a
c
b

real    0m3.332s
user    0m0.170s
sys     0m0.037s

ノート:

順序を入力と同じに保ちたい場合は、-kフラグを GNU parallel に渡します。

8 つ以上のコアがあり、8 つのコアのみで処理したい場合は-j 8、args リストに追加します。

man ページはよく読んでいますが、このチュートリアルをまだ読んでいない場合は、時間の投資を強くお勧めします。

于 2012-07-15T05:36:56.220 に答える
24

プロセスの最大数を使用可能なコアの数に制限しながら、xargsを使用してファイルを読み込むことができます。例えば:

cores=$(fgrep -c processor /proc/cpuinfo)
xargs --arg-file=/tmp/foo \
      --max-procs=$cores  \
      --replace \
      --verbose \
      /bin/sh -c "{}"
于 2012-07-15T05:26:11.623 に答える
0

& を使用してコマンドを実行するだけで、バックグラウンドで新しいプロセスを開始できます。ここに、問題の解決策を説明する例があります。

于 2012-07-15T00:11:41.727 に答える