11-7.c

来自「《linux应用开发技术详解》的配套代码」· C语言 代码 · 共 52 行

C
52
字号
 #include <stdio.h>
  #include <stdlib.h>
 #include <pthread.h>
  #include <signal.h>
  #include <string.h>
  #include <errno.h>
  static sigset_t   signal_mask;  /* 阻塞信号 */
 
  int main (int argc, char *argv[])
  {
     pthread_t  sig_thr_id;      /* 信号处理线程ID */
     int        rc;              /* 返回编码*/
     sigemptyset (&signal_mask);
     sigaddset (&signal_mask, SIGINT);
    sigaddset (&signal_mask, SIGTERM);
     rc = pthread_sigmask (SIG_BLOCK, &signal_mask, NULL);
     if (rc != 0) {
       /* 做错误处理 */
         ...
      }
     /* 所创建的线程都可以继承信号mask*/
 
 
     rc = pthread_create (&sig_thr_id, NULL, signal_thread, NULL);
     if (rc != 0) {
         /*出错处理 */
         ...
       }
     /* 应用程序代码 */
 }

  void *signal_thread (void *arg)
   {
      int  sig_caught;    /* 捕捉信号*/
      int  rc;            /* 返回编码      */
    rc = sigwait (&signal_mask, &sig_caught);
    if (rc != 0) {
        /* 出错处理 */
    }
   switch (sig_caught)
     {
       case SIGINT:     /* SIGINT信号处理  */
        ...
         break;
     case SIGTERM:    /* SIGTERM信号处理 */
          ...
        break;
        default:         /* 默认处理*/
         fprintf (stderr, "\nUnexpected signal %d\n", sig_caught);
         break;
     }
   }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?