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