23,125
社区成员
发帖
与我相关
我的任务
分享
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
/* Simple error handling functions */
#define handle_error_en(en, msg) \
do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
static void * sig_thread(void * arg)
{
printf("pthread_create\n");
sigset_t *sigset = (sigset_t *) arg;
int ret,sig;
for(;;) {
printf("signal_handle_thread\n");
ret = sigwait(sigset,&sig);
if (ret != 0) {
printf("sigwait fail\n");
}
printf("signal handling thread get signal %d\n",sig);
}
return NULL;
}
int signal_block()
{
sigset_t sigset;
sigemptyset(&sigset);
sigaddset(&sigset, SIGQUIT);
sigaddset(&sigset, SIGUSR1);
sigaddset(&sigset, SIGCHLD);
int ret = pthread_sigmask(SIG_BLOCK, &sigset, NULL);
if (ret != 0) {
printf("pthread_sigmask error\n");
return -1;
}
pthread_t thread;
ret = pthread_create(&thread,NULL,sig_thread,(void*)&sigset);
if (ret != 0) {
printf("pthread create fail\n");
return -1;
}
return 0;
}
int main(int argc, char *argv[])
{
/*
sigset_t sigset;
sigemptyset(&sigset);
sigaddset(&sigset, SIGQUIT);
sigaddset(&sigset, SIGUSR1);
sigaddset(&sigset, SIGCHLD);
int ret = pthread_sigmask(SIG_BLOCK, &sigset, NULL);
if (ret != 0) {
printf("pthread_sigmask error\n");
return -1;
}
pthread_t thread;
ret = pthread_create(&thread,NULL,sig_thread,(void*)&sigset);
if (ret != 0) {
printf("pthread create fail\n");
return -1;
}*/
signal_block();
pause(); /* Dummy pause so we can test program */
return 0;
}