※ ChatGPTを利用し、要約された質問です(原文:fork()のpidとppid)
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はどうなるのでしょうか?
説明がうまくできないのですが、
分かる方いましたら回答よろしくお願いします。
お礼
お礼が遅くなってすみません。 回答者さんのように考えて進めていたので合っていてよかったです。 変数名紛らわしい。。。 ありがとうございました。