Linux kernelにinotifyが組み込まれている環境では、inotify-tools パッケージ のinotifywaitを使って、パラレル実行した結果が全部終わるのを待ってから、次に進むようなスクリプトが作れるらしい。(kernel 2.6.13以降ならinotifyを使えるらしい)
inotify-tools
process1~process4までをいっぺんに並列実行して
それが全部終わったprocess5を実行させたい
#!/bin/bash process1 & process2 & process3 & process4 & #ここで処理を待って process5 exit
こんなスクリプトを書きたい場合・・・
#!/bin/bash (process1; touch /tmp/myprocess/p1) & (process2; touch /tmp/myprocess/p2) & (process3; touch /tmp/myprocess/p3) & (process4; touch /tmp/myprocess/p4) & #ここで処理を待って for i in {1..4}; do inotifywait -e CREATE -qq /tmp/myprocess/ done process5 exit
説明!
inotifywait -e CREATE -qq /tmp/myprocess/
ここは、/tmp/myprocess/ にファイルが作られたことを検知する。
/tmp/myprocess/ に何でもいいから1つファイルが作られるまで、待ちとなる。
この処理をfor文で4回繰り返している。つまり、ファイルが4つ作られるまでは、ここで待つことになる。
問題点
RHEL/CentOS5では、inotify-toolsが標準で入っていないこと。
コンパイルしてインストールする必要がある。
注!
このスクリプトは、例えば、100個ぐらい走らせたい処理があるけど、CPU coreが4つあるから、同時実行は4つとして、終わり次第次々に実行させていきたい。という場合には使えません。