首先我们来了解一下信号的概念!
我们可以以上红框中的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就会直接向操作系统发送信号!然后让操作系统来中止错误进程!