2017-06-21 3 views
1

私は、メインスクリプトから分岐したn個のプロセスを並列に実行するスクリプトを作成しようとしています。実行中のプロセスの数は常にnにする必要がありますが、プロセスごとの実行時間は異なる場合があります。bashを使用してn個のプロセスを起動し、別のプロセスを開始するには?

例:私はpidで1,2,3の3つのプロセスを開始します.3つのプロセスのいずれかが終了したら、新しいプロセスを開始したいと思います。最初に2が終了したら、プロセス4を実行して、実行中のpidが1、3、および4になるようにします。

waitコマンドがすべてのジョブが終了するまで使用されている。私の場合、実行中のジョブの1つが終了すると、すべてのジョブが完了するまで待つ必要はありません。

+1

あなたはまだすることができ1つのプロセスが終了するまでwaitコマンドを使用してから、続行してください。 –

+0

私は、すべてのプロセスが終了するまで待機がブロックされることを前提にしていました。 – mrowe

+1

'wait'組み込み関数は複数の動作モードを持っています。 – hek2mgl

答えて

1
wait -n `jobs -p` 

そうした仕事をしているようです。ガイダンスl'l lとhek2mglをありがとう。

0

また、純粋なbash組み込み関数を壊してパッケージをインストールしても構わないのであれば、waitなどを使うだけでなく、gnu semaphore/parallelを使って強力なジョブ制御を実現できます。

# sem can emulate a counting semaphore. Use --jobs to set the number of toilets like this: 

sem --jobs 3 --id my_id -u 'echo Start 1; sleep 5; echo 1 done' && 
sem --jobs 3 --id my_id -u 'echo Start 2; sleep 6; echo 2 done' && 
sem --jobs 3 --id my_id -u 'echo Start 3; sleep 7; echo 3 done' && 
sem --jobs 3 --id my_id -u 'echo Start 4; sleep 8; echo 4 done' && 
sem --wait --id my_id 

#出力:

Start 1 
Start 2 
Start 3 
1 done 
Start 4 
2 done 
3 done 
4 done 

https://www.gnu.org/software/parallel/parallel_tutorial.html

また、CPUコアごとのプロセスを制御する力を持って、並列処理のためのタイムアウトを指定するなど

関連する問題