1. ホーム
  2. c

なぜこのプログラムは "forked!" と表示するのでしょう?を4回表示するのですか?

2023-10-03 04:39:57

質問

なぜこのプログラムは "forked!" と表示するのですか?を4回表示するのでしょうか?

#include <stdio.h>
#include <unistd.h>

int main(void) {

  fork() && (fork() || fork());

  printf("forked!\n");
  return 0;
}

どのように解決するのですか?

最初の fork() は呼び出し側のプロセス(p0と呼ぶ)で0以外の値を返し、 子プロセス(p1と呼ぶ)では0を返します。

p1では、ショートサーキットで && が取られ、プロセスは printf を呼び出して終了します。p0 では、プロセスは式の残りを評価する必要があります。そして fork() を再び呼び出し、新しい子プロセスを生成します (p2)。

p0では fork() は0でない値を返し、ショートサーキットで || が取られるため、プロセスは printf を呼び出して終了します。

p2において fork() は0を返すので、||の残りを評価する必要があり、これは最後の fork() であり、p2 の子 (p3 と呼ぶ) を作成することになります。

P2 は次に printf を実行し、終了します。

次にP3は printf を実行し、終了します。

4 printf が実行されます。