fork

自身と同じプロセスを新たに生成する

構文

解説

fork は自身と同じプログラムを実行する新たなプロセスを生成します。 fork は親プロセスには子プロセスの pid を返し、子プロセスには 0 を返します。 もしフォークが失敗すると undef を返します。 フォークされたプロセスはほとんどすべてがコピーされますが、 ファイルディスクリプターは共有されます。

fork は同じ Perl プログラムをフォークするため、 親プロセスの処理と子プロセスの処理の両方を記述しておく必要があります。

# 子プロセスをフォークする
my $pid = fork();

# 親プロセスと子プロセスの分岐
if ($pid) {
    # 親プロセスのコード
    print "親プロセス\n";
}
else {
    # 子プロセスのコード
    print "子プロセス\n";
    exit 0;
}

子プロセスは、親プロセスと同じコードが実行されてしまいます。 そのため、子プロセスの処理が終わったら、それ以降の親プロセスのコードが子プロセスで実行されてしまわないよう、 必ず明示的に exit を呼び出してください。

子プロセスをフォークすると、状況によっては、親プロセスのほうが先に終了してしまいます。 子プロセスがゾンビプロセスとして残ってしまう可能性がありますので、 waitpid を使って、子プロセスの終了を待つようにしてください。 詳細は waitpid の解説を参照してください。