Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1047709
  • 博文数量: 297
  • 博客积分: 11721
  • 博客等级: 上将
  • 技术积分: 3431
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 10:21
文章分类

全部博文(297)

文章存档

2016年(9)

2011年(71)

2010年(137)

2009年(80)

分类: C/C++

2009-11-28 20:45:43

#include
#include
#include
#include
#include
#include

sigset_t bset,oset;
void sig_handler(int signo)
{
    printf("Receive signal %d\n",signo);
}

void * sigmgr_thread()
{
    int sig,rc;
    pthread_t tid = pthread_self();
    pthread_detach(tid);
        
    sigemptyset(&bset);
    sigaddset(&bset,SIGRTMIN);
    sigaddset(&bset,SIGRTMIN+2);   
    sigaddset(&bset,SIGRTMAX);
    sigaddset(&bset,SIGUSR1);
    sigaddset(&bset,SIGUSR2);

    while(1)
    {
        rc = sigwait(&bset,&sig);
        if(rc!=-1)
        {
            sig_handler(sig);
        }
        else
        {
            printf("sigwaitinfo() returned err: %d; %s\n",errno,strerror(errno));
        }
    }
}

void sig_thread_init(void)
{
    pthread_t tid;

    sigemptyset(&bset);
    sigaddset(&bset,SIGRTMIN);
    sigaddset(&bset,SIGRTMIN+2);
    sigaddset(&bset,SIGRTMAX);
    sigaddset(&bset,SIGUSR1);
    sigaddset(&bset,SIGUSR2);

    if(pthread_sigmask(SIG_BLOCK,&bset,&oset)!=0)
        printf("!! Set pthread mask failed \n");

    if((pthread_create(&tid,NULL,sigmgr_thread,NULL))!=0)
        perror("Signal thread create failed \n");
}
int main(void)
{
    pid_t pid =getpid();
    sig_thread_init();   

    kill(pid,SIGUSR1);
    kill(pid,SIGUSR1);
    kill(pid,SIGUSR2);
    while(1)
    {
   
    }
}
阅读(693) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~