Linux之信号

本文详细探讨了Linux信号的概念,包括进程的前台与后台、信号的发送与接收、信号的处理方式,以及信号在内核中的实现。通过实验验证了Ctrl+C发送的是二号信号,并介绍了信号的四种产生方式。此外,还讲解了Core Dump、信号的保存状态(未决与递达)、信号的阻塞与屏蔽,以及volatile关键字的作用。文章最后提到了SIGCHLD信号在处理子进程退出时的重要性。
摘要由CSDN通过智能技术生成

首先我们来了解一下信号的概念!

我们可以以上红框中的4个特点。

进程分为前台和后台进程,前台进程只有一个,后台进程可以有多个!(并且后台进程不能用ctrl+c中止,只能用kill -9去杀掉)

jobs可以看作业标识号!

(ctrl+z可以暂停进程,不能暂停前台进程,如果暂停就会被挂起到后台)

fg +作业标识号可以将后台提到前台,bg +作业标识号可以将一个暂停的任务在后台重新继续执行

启动后台进程的方法就是./xxx &再启动的时候后面加上&就可以了!

然后我们再来研究一个问题:操作系统怎么知道键盘有数据输入的呢?

外设与cpu的相关针脚有连接,当有信息输入的时候,操作系统会读取相应的中断号,然后读取相应的数据拷贝进来!!!

由此就会有这个中断向量表!(开机生成的第一种表!)

每个都会指向一个对应的方法!

先说一个结论,我们平时的使用ctrl+c其实就是向进程发送了二号信号!(== kill -2 +id)

接下来我们就来验证这个结论!

我们系统中有一个表,保存着收到不同信号执行的方式,所以我们要验证结论就需要借助这个表!

接下来我们先学一个系统调用signal,可以将信号的默认处理方式改成我们设置的信号处理方式!

(9号信号和17号信号不可以被自定义捕捉,其他的都可以)

通过上面的实验,我们就证明了我们上面的结论!!

这样我们就了解了信号的第一种产生方式,

接下来我们来正式看一下信号。

其中1-31是普通信号,34-64是实时信号!

目前我们主要讲普通信号。

这个时候就会产生一个问题,进程如何确定自己是否收到了某种信号,或者说信号到底是以一种什么样的形式进行传递和保存的?

答案就是位图,特定的比特位位置代表的就是特点的信号!

并且从低到高的比特位分别代表1,2....32号信号!!!

所以所谓的发信号其实就是写信号——将相应的比特位置1即可!(这里要注意一点,发信号的只能是操作系统,因为只有操作系统才是进程的管理者!!!)

然后我们再来谈一下异常,除0错误其实是会导致cpu的溢出标记位置1,这时cpu就会直接向操作系统发送信号!然后让操作系统来中止错误进程!

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值