linux 信号捕捉和处理的问题~~~在线等
#include
#include
#include
#include
#include
#include
/* 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 */