Perlのfork
2008年1月17日
某サイトで、某処理(割りと重め)をする時に、
system("hoge.pl 'foo1' 'foo2' & ");みたいな感じで別のplを叩いて処理を任せるように(※そうしないと、apache側でtimeoutするから)したんですけど・・
コレfork使うのが正しいんじゃね?
と今更思った。
#!/usr/bin/perl
$| = 1;
FORK: {
if( $pid = fork ) {
# 親の処理
close(STDOUT);
wait;
} elsif (defined $pid) {
close(STDOUT);
# 子の処理
exit;
} elsif ( $! =~ /No more process/) {
# Retry
sleep 5;
redo FORK;
} else {
# err
die "Can't fork: $\n";
}
}
簡単に書くとこんな感じかなぁ・・。
実際動かしてないから保障はしませんが。
管理者向けツールなんで、直さなくてもいいけど・・、
気が向いたら直します。