0
fork()
システムコールでは、アドレス空間の2つの同一のコピーが作成されます.1つは親用、もう1つは子用です。fork()で子プロセスの作成を検出する
if文でforkを使用する場合、次のコードで子プロセスを何回作成するのですか?
fork();
pid=fork();
if(pid==0)
{
fork();
}
fork()
システムコールでは、アドレス空間の2つの同一のコピーが作成されます.1つは親用、もう1つは子用です。fork()で子プロセスの作成を検出する
if文でforkを使用する場合、次のコードで子プロセスを何回作成するのですか?
fork();
pid=fork();
if(pid==0)
{
fork();
}
ような何かを得るために少し余分なコードを追加します、コンパイルし、実行し、その出力をチェックし
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = fork();
if (pid != 0) printf("%d\n", pid);
pid = fork();
if (pid != 0) printf("%d\n", pid);
if(pid==0)
{
pid = fork();
if (pid != 0) printf("%d\n", pid);
}
return 0;
}
を:5つのプロセスID。
5回。それ以上の説明が必要ですか? – Beta
"アドレス空間の2つの同一のコピーを作成する" - いいえ、そうではありません。既存のアドレス空間の同一のコピーを作成します。最近の実装では、それはしません。オリジナルと同じページをすべて参照する新しいアドレス空間を作成するだけですが、コピー時にコピーをマークします。 – twalberg