Linux下信号的总结与概况

本文详细介绍了信号相关知识,信号是软件中断,分为可靠和非可靠信号。阐述了信号的分类、常见信号,如SIGSEGV、SIGFPE等,还介绍了相关命令、生命周期、产生方式、注册、注销、处理、阻塞等内容,以及不可被阻塞信号和可重入与不可重入函数。

信号:是一个软件中断;通知进程发生了某件事情,会打断当前进程的操作;让进程去处理这些事件
1.信号的分类:有很很多中 62种 分为两大类 :可靠信号34~64/非可靠信号 1到31 (中间有两个没有 32 33) 进程必须识别这些信号(不识别就没有信号的意义)
1)1到31是基于liunx操作系统而来 (有可能丢失事件)
2) 34到64 因为信号不够用 但没有特定的命名(可靠信号或者实时信号 ,不会丢失事件)
3) 常见信号 SIGSEGV 段错误 内存访问越界
SIGFPE 除法时分母为0
SIGKILL 杀死进程信号
2.相关命令:查看信号种类-kill-l kill杀死进程原理:向进程发送信号-通知事件
3.信号生命周期:信号的产生->在进程中注册->在进程中注销->信号处理 (信号发生后会向在该进程的pcb中注册 再该进程得到时间片的时候,先在进程中注销该信号,然后再执行; 信号可以阻塞(有两个信号不能阻塞 因为如所有信号都被阻塞 则程序可能会一直运行);
4.信号的产生:
1)硬件产生:例如 ctrl+c(中断信号) ctrl+|(退出信号) ctrl+z停止信号
2)软件产生:kill - signum pid(向指定进程发生指定信息,啥信号都行只要能识别,包括在一个程序在根本不存在段错位的情况下使用 发送 SIGSEGV信号,在进程收到后直退出 并报错发生段错位)一下常用接口
1) 函数 int kill(pid,signum)pid 为进程名称 signum为信号的序号 可以给自己发getpid()这个函数可以获取自己的pid 可以实现自杀。 也可以给别人发。 如果进程不存在返回-1;
2)函数 int raise(signum)给自己发送相关信号
3)函数 void abort(void);自己给自己发送终止信号
4)函数 unsigned int alarm(nsec)定时器 时间到默认是进程终止,nesec为时间 定时器运行的只能有一个 如果设置了多个,上一个定时器还没退出则还没退出的情况下遇到下一个时间会变成下一个的时间 如果一个定时器时间没到 alarm (0);则取消上一个定时器;

5. 信号在进程中的注册:在pcb中使用位图(sigset_t 标记用)/可靠性信号(sigqueue 添加节点)标记进程是否收到信号 ,PCB 的pending结构体中的一个位置进行标记表示信号已经到来
1)非可靠信号 :信号到来后先看pending结构体标记的位置是否为0;如果为零则将其改变为1 1.值后再在sigqueuq这个链表中添加信号节点,如果为0(已经注册)则不执行任何操作,该信号被忽视。
2)可靠信号:前面相同 ,后面不管信号是否已经注册,会一直把新信号的节点添加进去,不会丢失信号。
3)信号注册后,如果没有检测信号是否到来,则称未决状态
4)两种信号之分,是否针对以及注册的信号添加新的信号节点

6.信号的注销:在PCB中抹除信号存在的痕迹(修改位图,删除节点)
1)非可靠信号:节点只有一个,删除该节点,位图置零
2)可靠性和:节点可能有多个,注销就是删除一个节点,然后再判断是否还有节点,如果没有位图置为0;如果有则继续上述操作 (位图表示还有没有信号)
7.信号的处理
信号的处理并不是立即被处理;而是选择一个合适的时机;
当程序从内核态返回用户态的时候处理;
(内核态:系统调用,操作系统提供的接口;用户态:自己编的代码)
1)进程如何从用户态切换为内核态:发起系统调用;程序异常;中断
进程运行的代码若是库函数或者自己写的函数,就说进程当前运行再用户态;
2)信号处理方式:1.默认处理方式 : 既定义好的处理方式 2. 忽略处理方式 处理动作中什么都没有做 3.自定义处理方式 用户自己确定信号如何处理 自定义信号的处理函数替换原有的处理函数
4.处理过程
自定义处理方式信号的捕捉流程
*

当系统掉用完成后需要从用内核态转回到用户态,调用do_signal看是否有信号待处理,如果没有直接退出,如果有自定义信号,则进入用户态进行执行信号函数,当函数执行完后 sig_retuen返回内核态,再检测还有没有待处理信号,如果有继续上述过程,如果没有则直接退出;(可参照上图)
3)如何修改信号处理方式: sighandler_t signal(int signum, sighandler_t handler);
① int signum为要修改的信号ID
②sighandler_t handler:函数指针,新的函数,SIG_DFL:信号的默认处理动作,SIG_IGN:忽略信号;
4)int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);用2替换1,2再放到3中
**
9.信号的阻塞:阻止信号被递达 递达:一个动作–信号的处理(信号依然可以注册只是暂时不处理)
再pcb中还有一个集合–阻塞信号集合–标记那些信号不被处理
原理:在这里插入图片描述
如图:信号再pending中注册当要执行信号的时候现在block匹配,如果对应的信号被阻塞则不会执行。
函数: int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
how(有三个参数):SIG_BLOCK 向阻塞集合中加入set集合中的信号 block = make | set
SLG_UNBLOCK 从阻塞集合中移除set集合中的信号 block = make&(~set)
SLG_SETMASK 将set集合中的信号设置为阻塞集合 block = set
oldest 用于保存替换前的信号
10不可被阻塞信号
9号信号SIGKILL和19号信号SIGSTOP不可以被阻塞,被自定义等操作,防止所有信号被阻塞,使得该程序退出。

11:可重入函数与不可重入函数
函数的重入:多个执行流程同时执行进入相同的函数,例如一个进程调用一个函数A 此时信号输入 ,而对信号处理的过程中 信号也调用了函数A ;此时就发生了函数的重入;
函数的可重入与不可重入:
可重入:多个执行流程同时执行相同的函数,不会造成数据的二义性以及代码的逻辑混乱
不可重入:多个执行流程同时执行进入相同的函数,有可能造成数据二义性以及代码的逻辑混乱
函数是否可重入: 函数是否对临界资源(全局数据)进行了非原子操作(不受保护的操作);
关键点:在一个函数中是否对临界资源进行了不受保护的非原子操作

### 常用 Linux 命令列表及使用教程 #### 文件和目录管理命令 - **`cd`**: 更改当前工作目录。例如,进入名为 `Documents` 的文件夹可输入 `cd Documents`[^1]。 - **`ls`**: 列出指定工作目录下的内容。加上 `-l` 参数可以显示更详细的文件信息,如权限、大小等;`ls -a` 可以查看隐藏文件。 ```bash ls -la ``` - **`mkdir`**: 创建新的空目录。创建一个叫做 `new_folder` 的新文件夹可以通过如下指令实现:`mkdir new_folder`。 - **`rm`**: 删除文件或目录。删除单个文件可以用 `rm filename.txt`; 若要移除整个目录,则需附加 `-r` 选项(`rm -rf directory_name`)来强制递归地清除其下所有的子项。 - **`cp` 和 `mv`**: 复制 (`cp source destination`) 或移动/重命名 (`mv oldname newname`) 文件目录。 #### 进程管理和监控命令 - **`ps`**: 显示当前运行中的进程状态报告。通过管道符配合其他工具进一步筛选特定条件的记录。 - **`top`**: 动态展示系统的整体性能概况以及各个活动进程的信息摘要表,在交互模式下支持多种排序方式以便于分析资源占用情况。 #### 网络连接测试及相关功能命令 - **`ping`**: 向目标主机发送ICMP回声请求报文并等待回应,以此检验连通性和延迟状况。停止该操作可通过按下 Ctrl+C 实现中断信号传递给前台程序终止执行流程。 - **`ssh`**: 提供安全通道用于远程登录至另一台计算机上执行命令或者传输数据流,建立会话前可能需要验证身份认证机制(比如密钥交换过程)。当结束对话时记得键入 logout 关闭连接。 #### 归档压缩处理命令 - **`tar`**: 对多个文件打包成单一档案或将已有的存档解压展开为原始结构形式。结合 gzip/bzip2 编码算法能够有效减少体积便于存储分享用途。 #### 文本搜索匹配命令 - **`grep`**: 在文本串内查找满足正则表达式的行输出结果集。此实用程序常被用来过滤日志文档里的错误提示或是配置清单里含有某些关键字的内容片段。 #### 查找定位文件路径命令 - **`find`**: 遍历文件系统树形层次寻找符合条件的目标对象集合。可以根据名称、类型、时间戳等多种属性设定查询准则从而精准命中所需条目位置关系网状链接地址。 #### 用户切换命令 - **`su`**: 切换用户账户,默认情况下不带任何参数即表示转换为目标超级管理员(root),此时应提供相应口令完成授权校验手续[^2]。 #### 系统关闭重启命令 - **`shutdown` 和 `reboot`**: 分别负责安排有序停机计划或者是触发立即重新启动事件的发生发展变化趋势走向结局收场落幕完毕完结结束。 #### 软件包管理系统命令 对于基于 Debian 的发行版: - **`apt`**: 是 Advanced Package Tool 的缩写,提供了方便易用的功能接口来进行软件源同步更新、安装卸载应用程序等一系列维护作业任务自动化脚本编写指南手册参考资料文献出处来源依据说明解释介绍描述概述综述总结归纳概括要点重点难点疑点焦点热点话题讨论交流平台社区论坛网站网页页面界面设计开发编程代码样例实例案例研究调查统计数据分析挖掘可视化呈现展现展示展览展会现场直播实况转播报道新闻资讯消息公告通知通告布告声明宣称声称主张观点意见看法评论评价评估评测检测监测监督监管治理整顿整改改进改善优化提升加强增强强化巩固稳定平衡协调合作协作互助互利共赢共享共建共创共治共同富裕美好生活理想愿景使命责任担当奉献牺牲精神品质特性特征特点特色特长优势竞争力吸引力魅力影响力感染力号召力凝聚力向心力团结一心众志成城齐心协力共同努力奋斗拼搏进取创新创造发明发现探索求知欲好奇心学习态度方法技巧经验教训历史故事传说神话寓言童话儿歌童谣民谣方言俚语成语俗语歇后语谜语脑筋急转弯趣味问答游戏娱乐休闲放松减压舒缓心情情绪情感心理辅导咨询帮助求助救援救助支援援助帮扶扶助协助辅助辅佐赞助资助捐款捐物献爱心做公益慈善事业社会贡献价值意义目的意图动机原因缘由背景资料素材收集整理编辑撰写写作创作创意构思策划规划方案计划打算考虑思考反省反思回顾总结汇报述职演讲发言致辞祝词贺信慰问电感谢函邀请函会议纪要决议决定政策法规制度规范标准规程流程环节步骤顺序次序排列组合搭配关联联系沟通交流互动反馈响应反应应对策略措施办法手段途径渠道道路方向路线轨迹历程经历体验感受体会感悟理解认识了解掌握精通熟悉擅长专长爱好兴趣特长技能本领能力才干才华天赋禀赋素质修养品德人格个性性格脾气秉性作风习惯传统习俗文化文明传承延续继承发扬光大弘扬传播推广普及提高升华超越突破界限边界范围领域范畴方面角度侧面表面现象本质规律原理原则理论学说思想观念意识思维逻辑推理判断决策抉择选择挑选选拔甄选遴选优选精挑细选出类拔萃脱颖而出鹤立鸡群卓尔不凡众不同独一无二无可替代不可多得人才济济人杰地灵钟灵毓秀山清水秀风景优美环境宜人气候温和四季分明昼夜温差明显冷热交替循环往复周而复始生生不息绵延不断永不停歇奔腾向前勇往直前奋发图强自强不息厚德载物天道酬勤功成名就梦想成真心想事成万事如意一帆风顺一路平安幸福安康阖家欢乐美满团圆喜气洋洋欢欢喜喜开开心心快快乐乐平平安安健健康康顺顺利利红红火火蒸蒸日上欣欣向荣蓬勃发展繁荣昌盛国泰民安庆云涌起紫气东来祥龙降世瑞凤临门吉星高照鸿运当头福寿双全百依百顺千娇百媚万种风情婀娜多姿仪态万千楚楚动人倾国倾城沉鱼落雁闭月羞花一笑倾城再笑倾国等等形容美好事物的美好词语来形容这个美好的世界吧!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值