Linux 信号(signal):信号阻塞的相关函数

 在信号这部分还有一个很重要的知识点:信号阻塞。因此本文来简单聊一聊信号阻塞相关的内容。

一、理解信号阻塞

   阻塞信号,就是暂时不处理这个信号。 就像是过马路的时候,过马路是一个进程,红灯是一个信号,本来接收到这个信号后,我们需要执行这个信号的处理函数(等待绿灯到来后通过马路)。可是有人就是要闯红灯,这里就是把红灯信号给阻塞了。

  为了方便对阻塞的信号进行管理,在pcb中有一个block信号阻塞集合。在这个集合中标记了哪个信号,就表示要阻塞哪个信号。当进程收到了这个信号,就暂时不去处理这个信号。

因此如果要阻塞某个信号,就需要把该信号添加到信号阻塞集合。因此本文简单介绍如何给信号阻塞集合添加信号,如何修改信号阻塞集合等。

二、操作接口

1.sigprocmask

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset)

 作用:修改信号阻塞集合

  • how:要对阻塞集合进行的操作
  • set:要操作的信号集合
  • oldset:用于保存修改前block集合中的数据

 返回值:成功返回0,失败返回-1

how选项的操作共三种:

  1. SIG_BLOCK:将set集合中的信号添加到block集合中
  2. SIG_UNBLOCK:将set集合中的信号从block集合移除
  3. SIG_SETMASK:用set集合中的信号替换掉block集合中的所有信号

2.sigemptyset

int sigemptyset(sigset_t * set)

 作用:清空指定集合

  • sigset_t * set:要清空的信号集合

 返回值:成功返回0,失败返回-1

3.sigfillset

int sigfillset(sigset_t * set)

 作用:填充所有信号到set集合中

  • sigset_t * set:指定的信号集合

4.sigaddset

int sigaddset(sigset_t * set,int signum)

 作用:添加指定信号到集合中

  • sigset_t * set:要添加信号的集合
  • int signum:要添加的信号

 返回值:成功返回0,失败返回-1

5.sigdelset

int sigdelset(sigset_t * set,int signum)

 作用:从指定集合中移除指定信号

  • sigset_t * set:要移除信号的集合
  • int signum:要移除的信号

 返回值:成功返回0,失败返回-1

6.sigismember

int sigismember(const sigset_t * set,int signum)

 作用:判断指定信号是否在集合中

  • sigset_t * set:要判断的集合
  • int signum:要判断的信号

 返回值:如果该信号在集合中返回1,否则返回0

三、特殊信号

 下面两个信号不会被阻塞,不会被忽略,处理函数无法修改:

  1. SIGKILL(9号)
  2. SIGSTOP(19号)

猜你喜欢

转载自blog.csdn.net/weixin_57761086/article/details/128781096
今日推荐