专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »博文摘选 » handler:C++ signal handler sample »正文

handler:C++ signal handler sample

来源: 发布时间:星期日, 2009年9月27日 浏览:0次 评论:0
转载自:http://blog.csdn.net/hihui/archive/2009/09/27/4600344.aspx

:cat signal.c

#include <signal.h>
#include <errno.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>

void* sigmgr_thread();

int main()
{
    sigset_t bset;
    int             i;
    pid_t           pid = getpid();
    pthread_t       ppid;
   

    // Block SIGTERM and SIGUSR1
    sigemptyset(&bset);
    sigaddset(&bset, SIGTERM);
    sigaddset(&bset, SIGUSR1);
    pthread_sigmask(SIG_BLOCK, &bset, NULL);

   
    pthread_create(&ppid, NULL, sig_thread, NULL);
 
    for (i = 0; i < 50; i++) {
        printf("in main() sleep\n");
        sleep(10);
    }
    exit (0);
}

 
void* sig_thread()
{
    sigset_t   waitset, oset;
    siginfo_t  info;
    int        rc;

    sigemptyset(&waitset);
    sigaddset(&waitset, SIGTERM);
    sigaddset(&waitset, SIGUSR1);

    while (1)  {
        printf("in sig_thread()\n");
        rc = sigwaitinfo(&waitset, &info);
        if (rc != -1) {
            printf("sigwaitinfo() get a signal - %d\n", rc);
            if (info.si_signo == SIGUSR1)
                                printf("sigwaitinfo() get a signal - %d\n", rc);
            else if (info.si_signo == SIGRTMIN)
                                printf("sigwaitinfo() get a signal - %d\n", rc);
           
        } else {
            printf("sigwaitinfo() returned err: %d; %s\n", errno, strerror(errno));
        }
    }
}

:cc signal.c -lrt

:kill -16 $PID

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: