Perlのfork

某サイトで、某処理(割りと重め)をする時に、

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";
    }
}

簡単に書くとこんな感じかなぁ・・。

実際動かしてないから保障はしませんが。

管理者向けツールなんで、直さなくてもいいけど・・、

気が向いたら直します。

参考:Perl第4回:PerlTips(バックグラウンドで処理を実行