Linux进程信号——信号的产生
文章目录
- 1.信号的概念
- 2.通过Ctrl c分析信号
- 2.1Ctrl c的作用
- 2.2 signal接口
- 2.3证明ctrl +c本质是信号
- 2.4总结
- 3.信号处理的常见方式
- 4.信号的产生方式
- 4.1通过终端按键产生
- 4.2调用系统函数向进程发送信号
- 4.3.1调用kill
- 4.3.2调用raise
- 4.3.2.1使用演示
- 4.3.2.2linux中9号信号不能被捕捉
- 4.3.3调用abort
- 4.3软件条件产生信号
- 4.3.1使用演示
- 4.3.2 利用alarm验证IO对效率的影响
- 4.4硬件异常产生信号
- 4.5总结
1.信号的概念
信号是进程之间事件异步的一种方式,属于软中断。通俗一点讲就是OS向特定进程通知某件时间发生采用的一种方式。
一个进程在收到信号之前,就已经知道,当接收到信号时应该怎么去做。就好比行人相对于红绿红,在看到红绿灯之前就已经知道红灯停、绿灯行。
2.通过Ctrl c分析信号
2.1Ctrl c的作用
Ctrl +c 是通过硬件的输入方式中断进程,它的本质也是通过系统向进程发送信号。
在证明Ctrl c本质之前需要知晓Ctrl c的本质是往前台发送信息,在一次会话中只允许打开一个前台进程。
2.2 signal接口
signal的接口是捕获信号,对信号进行重定义
捕捉到了信号才会触发这个函数
2.3证明ctrl +c本质是信号
2.4总结
1.Ctrl c只能给前台发送信号给前台进程,一个命令后面加&表示放到后台运行,这样shell不必等待进程结束就可以接收新的命令,启动新进程
当进程被设置为后台进程时,我们在命令行输入的消息流会和后台进程的信息混合在一起,这是因为bash进程是在前台的,我们可以输入信息,但是显示器只有一个,被两个进程同时使用,说明他是临界资源,而这个临界资源又没有被保护,因此它的数据会发生混乱
2.Shell可以同时运行一个前台进程和多个后台进程,只有前台进程才能接收到键盘输入的组合键信号
3.前台进程可以随时接收一个组合键信号,证明了进程相对于信号是异步的
3.信号处理的常见方式
1.忽略信号
2.指向该信号的默认处理动作
3.捕捉信号,类似上面的捕捉2号信号,要求内核在处理该信号时切换到用户状态下执行
信号产生的时候,并不是被立即处理的,信号产生和新处理的中间有一个时间窗口,有一个信号的记录(信号产生,信号保存,信号生命周期结束)
4.信号的产生方式
4.1通过终端按键产生
前面已经介绍
4.2调用系统函数向进程发送信号
4.3.1调用kill
kill命令是调用kill函数接口竖向的,kill可以给一个指定的进程发送指定的信号,调用成功返回0,失败返回-1
4.3.2调用raise
4.3.2.1使用演示
raise可以给当前进程发送指定的信号(自己给自己发送信号),调用成功返回0,失败-1
4.3.2.2linux中9号信号不能被捕捉
这么多信号肯定要有信号不能被捕捉,因为如果都可以被捕捉,病毒可以将所有信号捕捉更改掉,系统就瘫痪了,因此需要一个信号不能被捕捉,即系统始终拥有对进程的终止能力
4.3.3调用abort
abort使当前进程收到信号而异常终止,给自己发生6号信号
4.3软件条件产生信号
4.3.1使用演示
4.3.2 利用alarm验证IO对效率的影响
4.4硬件异常产生信号
硬件的异常被检测到,并且通知OS,OS会向当前进程发送适当的信号
4.5总结
1、9号信号不能被捕捉
2、所有的信号都需要经过OS发出,因为发送信号是指挥信号干什么,只有管理者才有这个能力,所以所有信号的发出需要经过OS
3、上面介绍的是,信号的触发条件
4、如何表示收到信号:在进程的PCB中保存一张位图,1表示收到信号,0表示没有收到
5、如何表示发送信号:OS发信号只需在PCB中找到位图,将对应的比特位改为1
Linux进程信号——信号的产生相关推荐
- linux exec 二程序,二十五、Linux 进程与信号---exec函数
25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 m ...
- linux进程被信号杀死,Linux 命令 - kill: 向进程发送信号
kill 命令通常用来 "杀死"(终止)进程,它可以用来终止运行不正常的程序或者反过来拒绝终止的程序.kill 命令准确地说并不是 "杀死" 进程,而是给进程发 ...
- linux进程被信号杀死,linux杀死进程以及发送或响应信号
摘要 腾兴网为您分享:linux杀死进程以及发送或响应信号,真还赚,邮币在线,优美图,小t智联等软件知识,以及idevice,cdr条码生成器,二手车闪卖,卡卡日语,微帮手,arpr,萤石云监控,nf ...
- Linux 进程通信 -- 信号
一.概述 信号用于保持进程间的通信,可以备发送到一个进程或者一组进程,发送给进程的这个唯一信息通常是标志信号的一个数.信号可从键盘终端产生.虚拟内存中非法访问系统资源等情况下产生.信号异步发生,收到信 ...
- 转载 骏马金龙第9章 Linux进程和信号超详细分析
本文原创地址:骏马金龙https://www.cnblogs.com/f-ck-need-u/p/7058920.html 9.1 进程简单说明 进程是一个非常复杂的概念,涉及的内容也非常非常多.在这 ...
- linux进程接受信号,linux – 一个进程如何知道它已经收到一个信号
如果我错了,请纠正我这是我对信号的理解: As far as i know, signal generation and signal delivery are 2 different things. ...
- linux c 禁止对外通信,Linux c 屏蔽信号、切换信号
信号导致的问题 不是任何信号我们都需要的,如果遇到我们不想处理的信号,我们怎么避免这个信号? 1. 信号屏蔽 intsigprocmask(int how,//操作方式 SIG_BLOCK屏 ...
- Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存
Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...
- linux进程间通讯-信号
文章目录 进程间通信功能 信号 信号的概念 产生信号的方式 信号的默认(缺省)处理方式 进程接收到信号后的处理方式 kill函数 alarm函数 raise函数 abort函数 pause函数 sig ...
- linux进程中对信号的屏蔽,linux进程中的信号屏蔽
在linux的进程中可以接收到各种的信号,并且如果你不对信号进行处理,linux中的进程就会采用默认的处理方式处理,比如ctrl-c的信号,进程对它的处理就是终止进程的执行. 在linux中,我们也可 ...
最新文章
- 装了激光雷达的iPad Pro,还能用鼠标了:苹果新键盘、新iPad Pro、新MacBook Air来了...
- JavaScript中null与undefined的比较
- 二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)
- 【Python】时间处理:日期减少n年(考虑闰年)
- 几位无人驾驶领域的杰出科学家
- oracle awr报告生成_5.性能测试 - Oracle体系结构和性能优化简介
- 重建二叉树(C++)
- 微信小程序顶部tab切换
- java逻辑与或非_Java基础——逻辑运算符与或非
- 如何学习云计算这一文就够了!
- latex转word_最有效率的论文排版利器来了,word排版再见吧~
- 八数码问题的A*算法
- m4s格式转换mp3_超级详细!如何将B站缓存m4s文件无损转换为mp4格式
- smart gesture安装失败_3ds Max 2014 下载与安装步骤
- springboot RabbitMQ整合出现Reply received after timeout 异常
- 第七十七篇:车辆安全-车载软件C++语言开发指南(AUTOSAR C++)
- 单片机方案|口袋秤芯片方案
- country code table
- uni-app运行微信小程序时文件查找失败的问题
- 【转】配置Symbian模拟器支持模拟MMC存储卡