fork


子プロセスを作り出します。親プロセスには、チャイルドプロセスのpidを、チャイルドプロセスに 0 を返しますが、forkに失敗したときには、未定義値を返します。

フラッシュされていないバッファは、どちらのプロセスに対しても、フラッシュされていないままとなっています。これは、出力がダブルのを避けるためには、$|を設定するか、IO::Handleモジュールのファイルハンドルメソッドautoflushを呼ぶ必要があるかもしれないということです。

チャイルドプロセスの終了を待たずに、forkを繰り返せば、ゾンビをため込むことになります。

$SIG{'CHLD'} = sub { wait };

プロセスについては用語集「プロセス」を参照してください。

ダブルfork

forkの返却値のエラーチェックは省いています。

unless ($pid = fork) {
    unless (fork) {
        exec "what you really wanna do";
        die "no exec";
        # ... または ...
        some_perl_code_here;
        exit 0;
    }
    exit 0;
}
waitpid($pid,0); 
PAGE TOP

関連サイト