子プロセスを作り出します。親プロセスには、チャイルドプロセスのpidを、チャイルドプロセスに 0 を返しますが、forkに失敗したときには、未定義値を返します。 フラッシュされていないバッファは、どちらのプロセスに対しても、フラッシュされていないままとなっています。これは、出力がダブルのを避けるためには、$|を設定するか、IO::Handleモジュールのファイルハンドルメソッドautoflushを呼ぶ必要があるかもしれないということです。 チャイルドプロセスの終了を待たずに、forkを繰り返せば、ゾンビをため込むことになります。 $SIG{'CHLD'} = sub { wait }; プロセスについては用語集「プロセス」を参照してください。 ダブルfork forkの返却値のエラーチェックは省いています。 unless ($pid = fork) { unless (fork) { ex