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 类型的参数,对这种类型的数据进行初始化需要调用一些相关的操作函数:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具