信号

信号的概念:

  1. 简单
  2. 携带信息少
  3. 使用在某个特定场景

信号的状态:

  1. 产生
  2. 未决状态 -- 没有被处理
  3. 递达 -- 已经处理

信号相关函数:

  1. kill -- 发送信号给指定进程
  2. raise -- 给自己发信号
  3. abort -- 给自己发送异常终止信号
  4. 闹钟:
    • alarm -- 设置定时器(每个进程只有一个定时器)
    • setitmer -- 可以实现周期定时

信号集概念:

  1. 未决信号集:没有被当前进程处理的信号
  2. 阻塞信号集:将某个信号放到阻塞信号集,这个信号就不会被进程处理,当阻塞解除后,信号被处理

信号集相关函数:

  1. 自定义信号集:
    • int sigemptyset(sigset_t *set);        将set集合置空
    • int sigfillset(sigset_t *set);        将所有信号加入set集合
    • int sigaddset(sigset_t *set,int signo);        将signo信号加入到set集合
    • int sigdelset(sigset_t *set, int signo);        将signo从set集合删除
    • int sigismember(conset sigset_t *set, int signo);        判断set信号集中是否存在signo
  2. sigprocmask 函数
    • 作用:将自定义信号集(屏蔽、解除、覆盖)阻塞信号集
    • 函数原型:int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
  3. sigpending 函数
    • 作用:读取当前进程的未决信号集
    • 函数原型:int sigpending(sigset_t *set);
    • 参数set的值是由内核将未决信号写入set

信号捕捉函数:

  1. signal 函数
    • typedef void (*sighandler_t)(int);        函数指针
    • sighandler_t signal(int signum, sighandler_t handler);
  2. sigaction 函数
    • 函数原型int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

    • struct sigaction {
                     void     (*sa_handler)(int);
                     void     (*sa_sigaction)(int, siginfo_t *, void *);
                     sigset_t   sa_mask;
                     int        sa_flags;
                     void     (*sa_restorer)(void);
                 }; 
    • 结构体中 如果使用第一个参数,则sa_flags赋值为0。
    • sa_mask:在信号处理函数执行过程中临时屏蔽的信号。信号处理函数执行完毕后会执行临时屏蔽的信号
posted @ 2018-05-16 23:21  Gwkang  阅读(206)  评论(0)    收藏  举报