C の fork() に関するいくつかの記事を読んでいるときに、理解できない次の例 (以下のコード) を見ました。
問題の理解: "if" または "else" のみを実行し、両方は実行しません。しかし、子プロセスと親プロセスは「同時に」実行されるため、この例では、「if」と「else」の両方を実行したことがわかります。同時ではありますが、実際にはそうではなく、どちらのプロセスが最初に CPU を取得するかによって異なります (そうですか?)。
すべてを「奇妙」にしているのは、最初に「else」を通過し、次に「if」を通過する可能性があることです。これはどのように可能ですか?
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
void forkexample()
{
// child process because return value zero
if (fork() == 0)
printf("Hello from Child!\n");
// parent process because return value non-zero.
else
printf("Hello from Parent!\n");
}
int main()
{
forkexample();
return 0;
}
可能な出力は次のとおりです。
チャイルドからこんにちは!
親からこんにちは!
(また)
親からこんにちは!
チャイルドからこんにちは!