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

信号是一种通知机制。一个进程或操作系统或用户向另一个进程发送通知事件的方式。
进程如何知道自己收到信号了,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号信号
这里写图片描述
这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值