waitdemo2.c
// 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);
}