IT

waitdemo2.c

kio467 2014. 11. 11. 22:35

// wait를 조금 더 알아봅시다.


// 위의 코드에선 wait(NULL)을 했는데, 이번엔 NULL 대신 뭔가 받아보도록 하겠습니다.


// 다른 코드는 크게 다르지 않습니다만, 부모 프로세스를 다루는 쪽에 약간의 변화가 있습니다.


// 코드 내용상, 자식 프로세스가 종료 되면 그 신호를 wait에서 잡아냅니다.


// 그걸 child_status에 받아서 비트 마스킹을 하네요 음.. 이게 비트마스킹이라 부르는 그게 맞나 ㅋㅋ


// 어쨌건 자식 프로세스가 보낸 exit(17)을 부모 프로세스의 wait에서 잡아내고 그걸 처리하는 걸 보여줍니다.





#include <stdio.h>

#define delay 20
main()
{
    int newpid;
    void chile_code(), parent_code();
    printf("before %d\n", getpid());
    if((newpid=fork()) ==-1)
        perror("fork");
    else if (newpid==0)
        child_code(delay);
    else
    parent_code(newpid);
}

void child_code(int dly)
{
    printf("child %d here. will slep for %d seconds\n", getpid(), dly);
    sleep(dly);
    printf("child done. about to exit\n");
    exit(17);
}

void parent_code(int childpid)
{
    int wait_rv;
    int child_status;
    int high_8, low_7, bit_7;

    wait_rv = wait(&child_status);
    printf("done waiting for %d. wait returnde %d\n", childpid, wait_rv);

    high_8 = child_status >> 8;
    low_7 = child_status & 0x7F;
    bit_7 = child_status & 0x80;
    printf("status : exit = %d, sig = %d, core = %d\n", high_8, low_7, bit_7);
}