/* * Pai recebe um sinal quando um filho morre. */ #include #include #include #include #include typedef void (*sighandler_t)(int); int n_filhos; void trata_SIGCHLD(int signum) { int pid; pid = wait(NULL); printf("Meu filho %d morreu.\n", pid); n_filhos++; } int main() { int i; n_filhos = 0; signal(SIGCHLD, trata_SIGCHLD); for (i = 0; i < 5; i++) /* Pai cria 5 filhos */ if (fork() == 0) return 0; /* Filhos não fazem nada */ sleep(2); /* Aguarda um pouco para os filhos morrerem */ if (n_filhos) printf("Eu perdi %d filhos.\n", n_filhos); return 0; }