linux开发5-信号

signal

使用 signal () 函数可以捕捉进程中产生的信号,并且修改捕捉到的函数的行为,这个信号的自定义处理动作是一个回调函数,内核通过 signal () 得到这个回调函数的地址,在信号产生之后该函数会被内核调用。

sigaction

使用 signal () 函数可以捕捉进程中产生的信号,并且修改捕捉到的函数的行为,这个信号的自定义处理动作是一个回调函数,内核通过 signal () 得到这个回调函数的地址,在信号产生之后该函数会被内核调用。

sigset_t

sigemptyset

// 将set集合中所有的标志位设置为0
int sigemptyset(sigset_t *set);

sigaddset

// 将set集合中某一个信号(signum)对应的标志位设置为1
int sigaddset(sigset_t *set, int signum);

sigprocmask

因为用户是不能直接操作内核中的阻塞信号集和未决信号集的,必须要调用系统函数,关于阻塞信号集可以通过系统函数进行读写操作,未决信号集只能对其进行读操作。

先来看一下读 / 写阻塞信号集的函数:

#include <signal.h>
// 使用这个函数修改内核中的阻塞信号集
// sigset_t 被封装之后得到的数据类型, 原型:int[32], 里边一共有1024给标志位, 每一个信号对应一个标志位
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
  • 参数:

  • how:

    • SIG_BLOCK: 将参数 set 集合中的数据追加到阻塞信号集中

    • SIG_UNBLOCK: 将参数 set 集合中的信号在阻塞信号集中解除阻塞

    • SIG_SETMASK: 使用参 set 结合中的数据覆盖内核的阻塞信号集数据

    • oldset: 通过这个参数将设置之前的阻塞信号集数据传出,如果不需要可以指定为 NULL

  • 返回值:函数调用成功返回 0,调用失败返回 - 1

sigprocmask () 函数有一个 sigset_t 类型的参数,对这种类型的数据进行初始化需要调用一些相关的操作函数:

posted @   alvinlyb  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示