/* * Bloqueio para tratadores encadeados. */ #include #include #include #include void trata_SIGUSR1(int sig) { printf("Tratando SIGUSR1.\n"); } void trata_SIGUSR2 (int sig) { raise(SIGUSR1); printf("Tratando SIGUSR2.\n"); raise(SIGUSR1); printf("Fim do SIGUSR2.\n"); } int main (void) { struct sigaction act; sigset_t block_sigusr1; sigemptyset(&block_sigusr1); sigaddset(&block_sigusr1, SIGUSR1); act.sa_handler = trata_SIGUSR2; act.sa_mask = block_sigusr1; sigaction(SIGUSR2, &act, NULL); signal (SIGUSR1, trata_SIGUSR1); raise(SIGUSR2); sleep(2); return 0; }