電子書籍の厳選無料作品が豊富!

システムコールの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はどうなるのでしょうか?

説明がうまくできないのですが、
分かる方いましたら回答よろしくお願いします。

「fork()のpidとppid」の質問画像

A 回答 (1件)

添付の図に書かれているpidは、あなたが書いている


pid = fork();
の変数pidの事ではなく、そのプロセスのPIDです。
    • good
    • 0
この回答へのお礼

お礼が遅くなってすみません。

回答者さんのように考えて進めていたので合っていてよかったです。
変数名紛らわしい。。。
ありがとうございました。

お礼日時:2012/10/01 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!