5部 関数リファレンス

fork

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

関連記事