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"; } }
簡単に書くとこんな感じかなぁ・・。
実際動かしてないから保障はしませんが。
管理者向けツールなんで、直さなくてもいいけど・・、
気が向いたら直します。