文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux 主调线程里控制信号掩码

Linux 主调线程里控制信号掩码

时间:2010-04-19  来源:gogozhaoxinfeng

 

主调线程里控制信号掩码

在BOSS/WORKER IO 模式中,主线程创建任务交给子线程去处理,主线程一般设置为阻塞,然后接受输入或信号 。一般使main 线程同步阻塞在信号处理上。比如当接受到SIGHUP时,重新读入配置等等....

 #include <signal.h>

       int pthread_sigmask(int how, const sigset_t *restrict set,
              sigset_t *restrict oset);

       int sigprocmask(int how, const sigset_t *restrict set,
              sigset_t *restrict oset);

How:

SIG_BLOCK:     结果集是当前集合参数集的并集
SIG_UNBLOCK: 结果集是当前集合参数集的差集
SIG_SETMASK: 结果集是由参数集指向的集

1. 初始化一个信号集合
  sigset_t new_mask;
  sigfillset(&new_mask);
/***
sigfillset() initializes set to full, including all signals.
初始化一个信号集合,包含所有的信号。
**/
2.  获得当前信号集合
pthread_sigmask(SIG_BLOCK, &new_mask, &old_mask);
//! 进程信号集首先会变成new_mask(包含所有信号),并且设置前的信号集被保存到old_mask 。

3. 设置新的信号集合掩码
    sigset_t wait_mask;
    sigemptyset(&wait_mask);
    sigaddset(&wait_mask, SIGINT);
    sigaddset(&wait_mask, SIGQUIT);
    sigaddset(&wait_mask, SIGTERM);
    sigaddset(&wait_mask, SIGHUP);
    pthread_sigmask(SIG_BLOCK, &wait_mask, 0);

4. 主线阻塞,同步获得信号
   int sig = 0;
   sigwait(&wait_mask, &sig);
//! @brief 此函数将阻塞,直到收到一个满足wait_mask中的任何一个信号,信号的值将保存到sig变量中。

5. 识别信号,进行相应的处理.
  while(flag)
    {
        sigwait(&wait_mask, &sig);
        if(SIGHUP == sig)
        {
            process_sighup() ;
        }
        else
           flag = false;
    }
   //! 其他信号,进程退出
   stop();


   
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载