1. Calling fork multiple times
pid_t pid1 = fork();
pid_t pid2 = fork();
위 코드 실행시 아래와 같은 프로세스 그래프가 도출된다.
parent에서 child X를 낳고, 또 한 번 parent오 child X가 한 마리씩 프로세스를 낳는다. 총 4개의 프로세스가 생성된다.
parent가 받는 id1과 id2는 각각 임의의 자식프로세스의 id이다. 여기서는 X, Z라고 하겠다.
X는 id1으로 0을 받고 id2로는 Y프로세스의 id를 받는다.
Y는 X의 메모리를 물려받는다. 따라서 id1으로 0을 받는다. X의 자식이므로 id2 또한 0을 받는다.
Z는 parent의 메모리를 물려받는다. 따라서 id1으로 x를 받는다. parent의 자식이므로 id2로 0을 받는다.
while(wait(NULL) != -1 || errno != ECHILD);
종료할 때는 wait함수를 한 번 호출해서는 제대로 child가 reap되지 않는다.
여기서 부모 프로세스는 2개의 child process를 가지기 때문이다.
wait(NULL)은 기다리는 child process가 없는 경우 -1을 리턴한다.
child process가 모두 처리되고 나서 parent가 종료되도록 해준다.
2. Communicating between processes (using pipes) in C
pipe를 이용해서 process끼리 통신한다.
fd[0]에서 읽고, fd[1]에서 쓴다.