linux(信号产生的各种方式)

目录:

         1.引入

         2.介绍系统支持的信号列表

         3.键盘方式产生信号

         4.程序中存在异常问题,产生信号

         5.系统调用产生信号

         6.软件条件也能产生信号

         7.任何理解OS给进程发送信号

1.引入

linux(信号产生的各种方式)_第1张图片

 我怎么证明ctrl+c是向指定进程发送了2号信号呢??

signal 函数作用是修改指定的一个信号

linux(信号产生的各种方式)_第2张图片

linux(信号产生的各种方式)_第3张图片

linux(信号产生的各种方式)_第4张图片

2.介绍系统支持的信号列表

kill  -l    查看系统所支持的信号列表

linux(信号产生的各种方式)_第5张图片

 -------------------------------------------------------------------------------------------------------------------------------

3.键盘方式产生信号

linux(信号产生的各种方式)_第6张图片

 信号的产生方式其中有一种就是通过键盘产生

linux(信号产生的各种方式)_第7张图片

 那么应该怎么终止后台进程呢??

linux(信号产生的各种方式)_第8张图片

 总结一般而言:进程收到信号的处理方案有3中情况

1.默认动作    ---- 一部分是终止自己,暂停等

2.忽略动作  -----  是一种信号处理的方式,只不过动作就是什么也不干

3.自定义动作(信号的捕捉)   ----  我们刚用我们signal方法,就是在修改信号的处理动作:默认  --》 自定义动作

linux(信号产生的各种方式)_第9张图片

 linux(信号产生的各种方式)_第10张图片

------------------------------------------------------------------------------------------------------------------------------

4.程序中存在异常问题,导致我们收到信号退出

我们来做几个实验

linux(信号产生的各种方式)_第11张图片

既然进程已经崩溃了,进程为什么会崩溃呢??

linux(信号产生的各种方式)_第12张图片

 可是我们怎么证明我的程序崩溃是因为收到了11号信号呢??

linux(信号产生的各种方式)_第13张图片

-------------------------------------------------------------------------------------------------------------------------------

linux(信号产生的各种方式)_第14张图片

 linux(信号产生的各种方式)_第15张图片

 在win  or linux下进程崩溃的本质,是进程收到了对应的信号,然后进程执行信号的默认处理动作(杀死进程)

 --------------------------------------------------------------------------------------------------------------------------

为什么我的进程会收到信号呢????

linux(信号产生的各种方式)_第16张图片

-----------------------------------------------------------------------------------------------------------------------------

当进程崩溃的时候,你最想知道上面?????崩溃的原因 waitpid 中是status

当一个进程正常退出时,status次低八位,代表的是进程退出时的退出码,后低7位表示的是进程收到的信号

 也就是说崩溃的原因我们是可以通过status来得到的

你还想知道什么???在哪一行崩溃的!!!我得去解决啊

linux(信号产生的各种方式)_第17张图片

 为什么在我的计算机上没有见到 core dump这一项技术呢??原因是因为 默认在云服务器上,core dump这一项技术是被关掉的

linux(信号产生的各种方式)_第18张图片

 linux(信号产生的各种方式)_第19张图片

linux(信号产生的各种方式)_第20张图片 linux(信号产生的各种方式)_第21张图片

 所以呢,相当于我的进程出现崩溃的情况,我们可以尝试着把我们的core dump这个选项打开,直接看崩溃的位置

linux(信号产生的各种方式)_第22张图片

怎么证明并不一定所有的信号都会形成 core dump文件

 linux(信号产生的各种方式)_第23张图片

 所以不一定所有的信号都会形成core dump,但是只要你是信号终止的,status都会被设置

但是你有没有core dump文件是由core这个标志位决定!!!

-----------------------------------------------------------------------------------------------------------------------------

可是我该证明验证我有没有core dump文件是由 core这个标志位决定的呢??

linux(信号产生的各种方式)_第24张图片

可是我想看的是core dump flag 标志位

linux(信号产生的各种方式)_第25张图片

linux(信号产生的各种方式)_第26张图片

 5.系统调用产生信号

kill   系统调用接口产生信号

linux(信号产生的各种方式)_第27张图片

 linux(信号产生的各种方式)_第28张图片

 linux(信号产生的各种方式)_第29张图片

 linux(信号产生的各种方式)_第30张图片

linux(信号产生的各种方式)_第31张图片 此时我们就通过系统调用kill  产生信号!!!

kill是我要发信号给别人发

raise是我给自己发

linux(信号产生的各种方式)_第32张图片

linux(信号产生的各种方式)_第33张图片

abort 是给自己发送6号信号(给自己发送一个确定的信号)

linux(信号产生的各种方式)_第34张图片

--------------------------------------------------------------------------------------------------------------------------------

 6.软件条件也能产生信号

linux(信号产生的各种方式)_第35张图片

调用alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发送SIGALRM信号,该信号的默认处理动作是终止当前进程

这个函数的返回值是0(说明alarm是准点给当前进程发送信号的),要是没有准点发则返回值是设定闹钟时间还剩下的秒数

linux(信号产生的各种方式)_第36张图片

linux(信号产生的各种方式)_第37张图片

 我们来证明一下我们alarm的返回值

linux(信号产生的各种方式)_第38张图片

linux(信号产生的各种方式)_第39张图片

 linux(信号产生的各种方式)_第40张图片

 -------------------------------------------------------------------------------------------------------------------------------

linux(信号产生的各种方式)_第41张图片

 7.任何理解OS给进程发送信号

我们目前理解的就是:

OS给进程发送信号  ---》 OS 发送信号数据给task_struct

linux(信号产生的各种方式)_第42张图片

如何理解OS给进程发送进程信号  --》 发送信号数据给  task_struct  --》 本质是OS向指定进程的task_struct 中的信号位图写入比特位1,即完成信号的发送  --》信号的写入

你可能感兴趣的:(Linux模块学习,linux,运维,服务器)