当前位置: 首页 > news >正文

linux信号集

Linux系统中,信号是内核向进程发送的异步通知,用于告知进程发生了某种事件,比如如用户按下中断键、非法内存访问、定时器到期等。信号可以由系统发送,也可以由其他进程或应用程序自身发送。Linux支持多种信号,每种信号都有一个唯一的整数编号和一个默认的动作。

Linux信号集(sigset_t)是一个数据结构,用于表示信号集,即一组信号。sigset_t类型通常用于以下几种场景:

  1. 阻塞信号:使用sigprocmask()函数,进程可以创建一个信号掩码,用于暂时阻止某些信号的交付。

  2. 等待信号:使用sigwait()sigwaitinfo()sigtimedwait()函数,进程可以等待信号集中的任一信号的到来。

  3. 捕获信号:使用signal()sigaction()函数,进程可以指定对特定信号的处理方式,例如忽略信号、执行自定义的信号处理函数或执行默认动作。

  4. 发送信号:使用kill()raise()pthread_kill()函数,可以向进程或线程发送信号。

下面是一些常用的Linux信号及其编号和默认动作:

  • SIGHUP (1):挂起信号,通常在终端挂起时发送。默认动作是终止进程。
  • SIGINT (2):中断信号,通常由用户按下Ctrl+C触发。默认动作是终止进程。
  • SIGQUIT (3):退出信号,通常由用户按下Ctrl+\触发。默认动作是终止进程并产生核心转储(core dump)。
  • SIGILL (4):非法指令信号,当进程执行非法指令时发送。默认动作是终止进程并产生核心转储。
  • SIGABRT (6):通常与abort()函数关联,用于报告程序错误。默认动作是终止进程并产生核心转储。
  • SIGFPE (8):浮点异常信号,如除以零。默认动作是终止进程。
  • SIGKILL (9):终止信号,不能被捕捉或忽略。默认动作是立即终止进程。
  • SIGSEGV (11):段错误信号,通常由无效内存引用触发。默认动作是终止进程并产生核心转储。
  • SIGPIPE (13):管道破裂信号,当进程尝试向已关闭的管道写入时发送。默认动作是终止进程。
  • SIGTERM (15):终止信号,通常用于请求进程正常终止。默认动作是终止进程。
  • SIGCHLD (17):子进程状态变更信号,当子进程终止或停止时发送给父进程。默认动作是忽略。
  • SIGCONT (18):继续信号,用于继续一个已停止的进程。默认动作是继续进程。
  • SIGSTOP (19):停止信号,用于停止进程。不能被捕捉或忽略。默认动作是停止进程。
  • SIGTSTP (20):终端停止信号,通常由用户按下Ctrl+Z触发。默认动作是停止进程。
  • SIGTTIN (21):后台进程试图从控制终端读取时发送。默认动作是停止进程。
  • SIGTTOU (22):后台进程试图写入控制终端时发送。默认动作是停止进程。

这些信号可以通过signalsigaction函数来处理,也可以在程序中通过sigset_t类型的信号集来操作。信号集通常通过sigemptyset()sigfillset()sigaddsig()sigdelset()sigsuspend()等函数来初始化、填充、添加、删除信号或等待信号集中的信号。

/**int sigemptyset(sigset_t *set);- 功能:清空信号集中的数据,将信号集中的所有的标志位置为0- 参数:set,传出参数,需要操作的信号集- 返回值:成功返回0, 失败返回-1int sigfillset(sigset_t *set);- 功能:将信号集中的所有的标志位置为1- 参数:set,传出参数,需要操作的信号集- 返回值:成功返回0, 失败返回-1int sigaddset(sigset_t *set, int signum);- 功能:设置信号集中的某一个信号对应的标志位为1,表示阻塞这个信号- 参数:- set:传出参数,需要操作的信号集- signum:需要设置阻塞的那个信号- 返回值:成功返回0, 失败返回-1int sigdelset(sigset_t *set, int signum);- 功能:设置信号集中的某一个信号对应的标志位为0,表示不阻塞这个信号- 参数:- set:传出参数,需要操作的信号集- signum:需要设置不阻塞的那个信号- 返回值:成功返回0, 失败返回-1int sigismember(const sigset_t *set, int signum);- 功能:判断某个信号是否阻塞- 参数:- set:需要操作的信号集- signum:需要判断的那个信号- 返回值:1 : signum被阻塞0 : signum不阻塞-1 : 失败*/
/*int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);- 功能:将自定义信号集中的数据设置到内核中(设置阻塞,解除阻塞,替换)- 参数:- how : 如何对内核阻塞信号集进行处理SIG_BLOCK: 将用户设置的阻塞信号集添加到内核中,内核中原来的数据不变假设内核中默认的阻塞信号集是mask, mask | setSIG_UNBLOCK: 根据用户设置的数据,对内核中的数据进行解除阻塞mask &= ~set(也就是先对set取反,再与mask按位与),假设内核中默认的阻塞信号集是maskSIG_SETMASK:覆盖内核中原来的值- set :已经初始化好的用户自定义的信号集- oldset : 保存设置之前的内核中的阻塞信号集的状态,可以是 NULL- 返回值:成功:0失败:-1设置错误号:EFAULT、EINVALint sigpending(sigset_t *set);- 功能:获取内核中的未决信号集- 参数:set,传出参数,保存的是内核中的未决信号集中的信息。
*/

参考:链接:https://juejin.cn/post/7250037058684715067

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • WPF窗体动态效果
  • 评价算法(topsis熵权法)
  • language model
  • php收银系统源码(收银pos+聚合支付+ai智能称重+连锁多门店+多商户入驻平台版商城)
  • 【笔记】MSPM0G3507移植RT-Thread——MSPM0G3507与RT_Thread(二)
  • 图书借阅会员员工管理小程序开发
  • Spring事务管理和事务传播机制详解
  • 项目成功的关键:10款需求文档管理工具
  • Android进阶之路 - res、raw、assets 资源解析、区别对比
  • 生态系统NPP及碳源、碳汇模拟(土地利用变化、未来气候变化、空间动态模拟)
  • 【瑞芯微RV1126(板端摄像头图像数据采集)】②使用v4l2视频设备驱动框架采集图像数据,按键拍照并显示
  • 《Hadoop大数据技术与实践》+ 数仓版本
  • 使用免费图书馆条形码扫描仪快速扫描书籍
  • HarmonyOS应用开发者高级认证(一)
  • AI学习记录 - 自注意力机制中掩码的注意事项
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 《剑指offer》分解让复杂问题更简单
  • javascript 总结(常用工具类的封装)
  • Java编程基础24——递归练习
  • Mysql优化
  • Ruby 2.x 源代码分析:扩展 概述
  • SpriteKit 技巧之添加背景图片
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 编写高质量JavaScript代码之并发
  • 搭建gitbook 和 访问权限认证
  • 构建工具 - 收藏集 - 掘金
  • 前端面试总结(at, md)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 世界上最简单的无等待算法(getAndIncrement)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 移动端唤起键盘时取消position:fixed定位
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​linux启动进程的方式
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 数论-逆元
  • #define、const、typedef的差别
  • $(selector).each()和$.each()的区别
  • (4.10~4.16)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (rabbitmq的高级特性)消息可靠性
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (二十六)Java 数据结构
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (六)Flink 窗口计算
  • (小白学Java)Java简介和基本配置
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core 成都线下面基会拉开序幕
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET_WebForm_layui控件使用及与webform联合使用