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);