自身と同じプロセスを新たに生成する
fork
は自身と同じプログラムを実行する新たなプロセスを生成します。
fork
は親プロセスには子プロセスの pid を返し、子プロセスには 0 を返します。
もしフォークが失敗すると undef
を返します。
フォークされたプロセスはほとんどすべてがコピーされますが、
ファイルディスクリプターは共有されます。
fork
は同じ Perl プログラムをフォークするため、
親プロセスの処理と子プロセスの処理の両方を記述しておく必要があります。
# 子プロセスをフォークする
my $pid = fork();
# 親プロセスと子プロセスの分岐
if ($pid) {
# 親プロセスのコード
print "親プロセス\n";
}
else {
# 子プロセスのコード
print "子プロセス\n";
exit 0;
}
子プロセスは、親プロセスと同じコードが実行されてしまいます。
そのため、子プロセスの処理が終わったら、それ以降の親プロセスのコードが子プロセスで実行されてしまわないよう、
必ず明示的に exit
を呼び出してください。
子プロセスをフォークすると、状況によっては、親プロセスのほうが先に終了してしまいます。
子プロセスがゾンビプロセスとして残ってしまう可能性がありますので、
waitpid
を使って、子プロセスの終了を待つようにしてください。
詳細は waitpid
の解説を参照してください。