perlでforkを使うのに「Parallel::ForkManager」が便利そう。
並列処理のプロセスの分岐数などが楽に制御できるので、CPUを複数使う処理やクローラーなどで便利な雰囲気。
★インストール
shell
# yum install --enablerepo=rpmforge perl-Parallel-ForkManager.noarch
「rpmforge」を入れてなければリポジトリ追加。
★使い方(perl Docから)
test.pl
#!/usr/bin/perl
use Parallel::ForkManager;
$pm = new Parallel::ForkManager(2);
while ($cnt < 10) {
$cnt++;
# Forks and returns the pid for the child:
my $pid = $pm->start and next;
system("./test2.pl");
$pm->finish; # Terminates the child process
}
$pm->wait_all_children;
test2.pl
#!/usr/bin/perl
print "aaaa\n";
sleep 2;
print "bbbb\n";
「$pm->wait_all_children;」を入れないと、最後のプロセスを待たずにプログラムが終了してしまいます。
上記例ですと9、10個目の子プロセスを開始した段階で親プロセスが終了します。
・参考
http://perldoc.jp/docs/modules/Parallel-ForkManager-0.7.5/ForkManager.pod