#include #include #include #include #include void *foo(void* bar) { sigset_t blocked; sigemptyset(&blocked); sigaddset(&blocked,SIGTERM); pthread_sigmask(SIG_BLOCK,&blocked, NULL); while(1) { pause(); fprintf(stderr,"thread %d awaken\n",(int)bar); } } void handler(int foo) { fprintf(stderr,"foo %d\n",foo); } void setsig(int foo) { struct sigaction action; memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = handler; if (sigaction(foo, &action, NULL) == -1) perror("sigaction"); } int main(int argc, char*argv[]) { pthread_t t; setsig(SIGTERM); pthread_create(&t,NULL,foo,0); while (1) { pause(); fprintf(stderr,"main awaken"); } }