티스토리 뷰

Server/Linux

[Linux] waitpid 예제

annajinee 2017. 7. 10. 17:32

//부모 프로세스가 두개의 자식 프로세스를 생성하고 나중에 종료되는 자식프로세스를 먼저 처리해 주는 예제 프로그램

#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");
}
    

'Server > Linux' 카테고리의 다른 글

[Linux] ssh 접속  (0) 2017.07.10
[Linux] waitpid예제-WNOGANG옵션  (0) 2017.07.10
[Linux] 프로세스간 통신  (0) 2017.07.10
[Linux] 프로세스  (0) 2017.07.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함