fork()のpidとppid
システムコールのfork()の勉強をしています。
fork()によって作られたプロセスのそれぞれのpidとppidを知りたいのですが頭がこんがらがってしまいました。
「forkシステムコールは親プロセスには作成された子プロセスのプロセスIDが、子プロセスには0が返る」とあったので以下のコードの場合
pid = fork();
if(pid == 0)
printf("%s, child process\n", msg);
else
printf("%s, parent process\n", msg);
子のpidが0のためifが実行され、親はelseが実行される
というところまで理解できたのですが
このとき親のpidは子のID、子のpidは0なのでしょうか?
教科書の図(添付)を見ると親のpidは0で子、孫になるにつれてpidが大きくなっていてよくわからなくなってしまいました。
例えば以下のようなコードがあった場合、
pid_t pid;
// メインプロセスのPIDは42
pid = fork(); // プロセスをPID=11で作成
if (pid == 0) {
pid_t pid2 = fork(); // プロセスをPID=25で作成
if (pid2 == 0) {
sleep(20);
exit(0);
}
waitpid(pid2,NULL,0);
exit(0);
} else {
pid_t pid3 = fork(); // プロセスをPID=89で作成
if (pid3 == 0) {
sleep(10);
printf("** ONE **\n");
exit(0);
}
pid_t pid4 = fork(); // プロセスをPID=123で作成
if (pid4 == 0) {
sleep(30);
printf("** TWO **\n");
exit(0);
}
}
sleep(20);
exit(0);
それぞれのプロセスのpidとppidはどうなるのでしょうか?
説明がうまくできないのですが、
分かる方いましたら回答よろしくお願いします。