Linux信号(signal)----信号产生的条件及信号的处理

来源:互联网 发布:网络上玩龙虎犯法吗 编辑:程序博客网 时间:2024/06/08 10:45

信号是一种通知机制。一个进程或操作系统或用户向另一个进程发送通知事件的方式。
进程如何知道自己收到信号了,PCB里多了一个信号。
进程在没遇到信号之前就已经知道如何处理信号了,就比如小孩子在没见过红绿灯之前就已经知道红灯停绿灯行的道理。(因为记住了)。
这里写图片描述
这里写图片描述
这里写图片描述
Linux中有62个信号:
1-31号:普通信号 34-64号:实时信号 9号进程永远不会被捕捉到
键盘组合只能向前台进程发送信号
后台进程不能用Ctrl+C终止掉
若前台有10个进程,按Ctrl+C,则这10个进程全部被终止掉。
信号产生的条件:
1、键盘组合键,终端程序发送信号给前台进程。
这里写图片描述
这里写图片描述
2、 硬件异常产⽣信号,这些条件由硬件检测到并通知内核,然后内核向当前进程发送适当的信号。做除0操作导致硬件异常,会收到8号信号。如下:
这里写图片描述
这里写图片描述
3、 一个进程调⽤用kill(2)函数可以发送信号给另一个进程。 可以⽤用kill(1)命令发送信号给某个进程,kill(1)命令也是调⽤kill(2)函数实现的,如果不明确指定信号则发送SIGTERM信号,该信号的默认处理动作是终⽌进程。
这里写图片描述
这里写图片描述
这里写图片描述
信号的处理:
1、忽略此信号。
2、执行该信号的默认处理动作。
3、捕捉信号:提供一个信号处理函数,要求内核在处理该信号时切换到⽤户态执行这个处理函数。
用户态和内核态的四次状态切换。
这里写图片描述
将Ctrl+C自定义后,不能使进程退出,但可证明确实发了2号信号
这里写图片描述
证明Ctrl+C确实收到了2号信号,该组合键被操作系统识别为2号信号
这里写图片描述
这里写图片描述

0 0
原创粉丝点击