2012-03-14 8 views
2

私はprocessというコマンドでディレクトリ内の100個のファイルを処理し、このプロセスを可能な限り並列化したいと考えています。だから、私はCシェルで次のコマンドを発行し、それは素晴らしい作品:Cシェルによって起動されるバックグラウンドプロセスを制限する方法は?

foreach F (dir/file*.data) 

process $F > $F.processed & 

echo $F 

end 

すべての100個のプロセスすべての私のコアの使用率を最大化し、同時にバックグラウンドで起動します。

ここでは、コアの半分(4つのうち2つ)を一度に使用したいと考えています。これを行うエレガントな方法はありますか?

+0

xargsに関する情報はこちらから検索してください。がんばろう。 – shellter

答えて

1

あなたはGNUは、あなたがこれを行うことができますhttp://www.gnu.org/software/parallel/がインストールされて並列している場合:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel 
chmod 755 parallel 
cp parallel sem 

より多くを学ぶためにGNUパラレルためのイントロビデオを見る:

parallel -j 50% 'process {} > {}.processed; echo {}' ::: dir/file*.data 

をあなたは単にによってGNUパラレルをインストールすることができます https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

+0

これは素晴らしいです。 parallelはperlスクリプトで、私のmacノートパソコンと私のLinuxボックスでうまく動作します。問題はうまく解決しました。ありがとう! – Nomadiq

関連する問題