0
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
void fork4()
{
printf("\n [%d] L0 \n", getpid());
if (fork() != 0)
{
printf("\n [%d] L1 \n" , getpid());
if (fork() != 0)
{
printf("\n [%d] L2 \n" , getpid());
fork();
}
}
printf("\n [%d] Bye \n" , getpid());
}
int main()
{
fork4();
return 0;
}
出力の場合には:は条件付き
[4141] L0
[4141] L1
[4142] Bye
[4141] L2
[4141] Bye
[4143] Bye
[4144] Bye
私は何が起こっている正確に理解しようとしているが、出力は非常に奇妙です!スコープの場合、親プロセスが最初に入ることができる理由はわかりません!誰かがここで何が起きているのかを説明すれば大丈夫でしょうか?
'fork()'の結果は、親プロセスではゼロ(成功の場合は正、失敗の場合は-1)で、子プロセスではゼロです。これは、親プロセスIDを取得する必要があるためです。子プロセスは、 'getppid()'を呼び出すことによって、常に現在の親プロセスID(自然または養子)を取得できます。 *親プロセスだけが 'if'を入力できます。 – AlexP