質問箱/32 - if elseの条件分岐について
質問 
『例題で学ぶLinuxプログラミング』と言う本を読んでいるのですが、どうにも分からないところがあるので質問してみました. 以下のプログラムなのですが、(4章、5章ではたくさんこの手のif-elseが使われています.)
#include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> int main(void) { pid_t child; int status; if((child = fork()) == -1){ perror("fork"); exit(EXIT_FAILURE); }else if(child == 0){ puts("in child"); printf("\tchild pid = %d\n", getpid()); printf("\tchild ppid = %d\n", getppid()); exit(EXIT_SUCCESS); }else{ waitpid(child, &status, 0); printf("in parent\n"); printf("\tparent pid = %d\n", getpid()); printf("\tparent ppid = %d\n", getppid()); printf("\tchild exited with %d\n", status); } exit(EXIT_SUCCESS); }
これをコンパイルリンクし、実行すると
else ifとelseの中身が両方実行されます。 これはなぜなのでしょか?
回答 
- なんのために fork をするというと、もちろん新しいプロセスを作るためです。新しいプロセスを作ると元のプロセスは消えるかどうかというと、消えたら作った意味がないですし、もちろんNOです。つまり、プロセスが2つになるわけですが、プロセスが2つあるということは、そのプログラムは2回実行されるわけです(fork した地点から)。親プロセスと子プロセスに別の処理をさせたい場合、if 文で分岐したいですよね。それが上のコードです。 -- s1080134 2008-10-21 (Tue) 01:04:49