/* * Tentativa de bloqueio para tratadores encadeados. */ #include #include #include #include void trata_SIGUSR1(int sig) { printf("Tratando SIGUSR1.\n"); } void trata_SIGUSR2 (int sig) { sigset_t block_sigusr1, mascara; sigemptyset (&block_sigusr1); sigaddset (&block_sigusr1, SIGUSR1); sigprocmask (SIG_BLOCK, &block_sigusr1, &mascara); printf("Tratando SIGUSR2.\n"); raise(SIGUSR1); printf("Fim do SIGUSR2.\n"); sigprocmask (SIG_SETMASK, &mascara, NULL); } int main (void) { signal (SIGUSR1, trata_SIGUSR1); signal (SIGUSR2, trata_SIGUSR2); raise(SIGUSR2); sleep(2); return 0; }