本文介绍: 可以看到在优化情况下对应捕捉到2号信号后,对应的flag置为1,但是main中的循环还是不结束,很明显while循环中的flag和handler中的flag已经不是同一个flag了,这就出现的二义性的问题了。在linux中,一个终端,一般会有一个bash,每个登录,只允许一个进程是前台进程,可以允许多个进程是后台进程,大部分可执行文件执行起来是后台文件。4.一个进程在信号产生,到信号被处理,就一定会有时间窗口,所以进程还有具有保存信号的能力。所以在是有信号捕获子进程退出的时候,最好用等待的方式来进行退出。
对应运行之后:
而在捕捉1-34号之间所有信号的时候:
只有9和19两个信号不能被捕捉。
2.信号的产生:
1.键盘组合键:
-
ctrl +c:
对应kill中的2号信号;
对应使用:
对应的使用:
结果:
对应在信号中有一个叫SIGABRT:
结果:
4.异常
1.除0错误:
对应结果:
对应在错误信号里寻找:
捕获信号之后:
结果:
对应的代码:
对因的结果:
在信号中找:
对应的参数是秒数:
对应的结果:
可以看到捕获到了。
对应剩余时间的概念:
结果:
对应信号的产生就有这5中方法。
对应的是一个进程停止信号:
对应的结果:
kill -2 的结果:
再看对应kill -8 的结果:
3.信号的发送:
信号只有31个,难道是巧合吗?
4.信号的保存:
首先来谈信号的存储:
一次简绍
1.block:
阻塞:
只要一个信号被阻塞就不会被递达。
忽略:
对应的图解:
对应的代码实现:
结果:
代码主要分为三步:
1.对信号2屏蔽:
3.解除阻塞:
如果将所有信号都屏蔽了呢?
5.信号的捕捉处理:
有三个参数:
对应的结果:
对应的代码:
结果:
对应的结论:
对应的状况:
否则,就是可重入。
先写一段代码
:
:
MAKEFILE:
结果:
可以看到在优化情况下对应捕捉到2号信号后,对应的flag置为1,但是main中的循环还是不结束,很明显while循环中的flag和handler中的flag已经不是同一个flag了,这就出现的二义性的问题了。
原因:
来避免这种优化:
SIGCHLD信号:
属于第17号信号。
代码验证:
结果:
可以看到被捕捉到了。
对应的结果:
等待的好处:
所以在是有信号捕获子进程退出的时候,最好用等待的方式来进行退出。
原文地址:https://blog.csdn.net/m0_61497245/article/details/134802135
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_44206.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。