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