#include #include #include static void *func(void *arg) { sigset_t sig; int s; sigemptyset(&sig); sigaddset(&sig, SIGUSR1); pthread_sigmask(SIG_BLOCK, &sig, NULL); printf("[sigtest:%d:%d]:func\n", getpid(), pthread_self()); sleep(3); while (1) { sigwait(&sig, &s); printf("[sigtest:%d:%d]:sigwait %d\n", getpid(), pthread_self(), s); } } int main(int argc, char *argv[]) { pthread_t tid; sigset_t sig; int s, i; sigemptyset(&sig); sigaddset(&sig, SIGUSR1); pthread_sigmask(SIG_BLOCK, &sig, NULL); printf("[sigtest:%d:%d]:main\n", getpid(), pthread_self()); pthread_create(&tid, NULL, func, (void *)0); while (1) { for (i = 10; (i = sleep(i)) > 0; ) /* sleep 10 sec */ ; printf("[sigtest:%d:%d]:send SIGUSR1\n", getpid(), pthread_self()); pthread_kill(tid, SIGUSR1); } return 0; }