#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <signal.h>

#include <sys/wait.h>



void read_childproc(int sig) {

    int status;

    pid_t id = waitpid(-1, &status, WNOHANG);

    if (WIFEXITED(status)) {

        printf("Remove proc id: %d \n", id);

        printf("Child send: %d \n", WEXITSTATUS(status));

    }

}


int main(int argc, char *argv[]) {

    pid_t pid;

    struct sigaction act;

    act.sa_handler=read_childproc;

    sigemptyset(&act.sa_mask);

    act.sa_flags=0;

    sigaction(SIGCHLD, &act, 0);


    pid = fork();

    if(pid == 0) {

        puts("Hi! I'm child process");

        sleep(3);

        return 12;

    } else {

        printf("Child proc id : %d \n", pid);

        pid=fork();

        if(pid == 0) {

            puts("Hi! I'm child process");

            sleep(3);

            exit(24);

        } else {

            int i;

            printf("Child proc id : %d \n", pid);

            for (i=0; i<5; i++) {

                puts("wait...");

                sleep(5);

            }

        }

    }

    return 0;

}


10장에 있는 코드인데요.

자식프로세스가 죽을때 signal 통해서전달 받아야하는데
아주 가끔씩 1번만 호출됩니다 1번 signal이 생략되요.

왜 그런걸까요?