- 论坛徽章:
- 0
|
#include <signal.h>
#include <pthread.h>
#include <stdio.h>
void intr(int sig,siginfo_t *info,void *context)
{
printf("caught by %d\n",pthread_self());
}
void * thread(void * arg)
{
//安装一个SIGINT信号处理
struct sigaction st;
sigemptyset(&st.sa_mask);
st.sa_flags = SA_SIGINFO;
st.sa_handler = intr;
sigaction(SIGINT, &st, NULL);
int ret ;
while ( 1 )
{
ret = sleep(10);
if(ret)
printf("interrupted\n");
}
}
main()
{
pthread_t tid;
sigset_t mask,oldmask;
setbuf(stdout,0);
printf("parent is %d\n",pthread_self());
pthread_create(&tid,0,thread,0);
sigemptyset(&mask);
sigaddset(&mask, SIGINT);
if (pthread_sigmask(SIG_BLOCK, &mask, &oldmask))
printf("SIG_BLOCK error\n");
sleep(200) ;
}
请注意红色代码,要在主线程里面阻塞sigint,这样ctrl+c就会把信号发给子线程了 |
|