//부모 프로세스가 두개의 자식 프로세스를 생성하고 나중에 종료되는 자식프로세스를 먼저 처리해 주는 예제 프로그램
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
main()
{
pid_t pid1, pid2;
int status;
pid1=pid2=1;
pid1=fork(); //pid1 자식 생성 함
if(pid1>0) //pid1이 부모일 경우,
pid2=fork(); //pid2를 fork한다.
if(pid1>0 && pid2>0) //pid1과 pid2가 모두 부모일 경우 -> 위에 생성한 뒤에
{
waitpid(pid2, &status, 0); //pid2를 기다림
//대기상태 0 : 일반적인 대기 상태로 지정한 자식 프로세스가 종료될 때까지 대기상태
//WNOWHANG : waitpid는 부모프로세스를 대기상태로 만들지 않는 옵션
//WNOWHANG옵션으로 waitpid를 호출하고 만약 종료한 자식 프로세스가 있으면 이를 정상적으로 처리하고 아직 종료한 자식 프로세스가 없으면 곧바로 0을 반환하게 된다.
printf("parent : child2 -exit(%d)\n", status); //두번째 프로세스 부터 실행한다.
waitpid(pid1, &status, 0); //pid1기다림 첫번째 자식 프로세스는 일시적으로 좀비 프로세가 된다.
printf("parent : child1 -exit(%d)\n", status);
}
else if(pid1==0 && pid2==-1) //pid1이 자식이고 pid2는...?
{
sleep(1); //첫 번째 자식 프로세스는 1초동안 대기하다 종료하고
exit(1);
}
else if(pid1>0 && pid2==0) //pid1이 부모이고 pid2가 자식일 경우 ->맨처음 fork시행했을 때
{
sleep(2); //2번째 자식은 2초동안 대기하다 종료 -> 첫번째자식이 먼저 끝남
exit(2);
}
else
printf("포크 생성 실패\n");
}