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

目录:

         1.引入

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

         3.键盘方式产生信号

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

         5.系统调用产生信号

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

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

1.引入

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

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

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

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

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

3.键盘方式产生信号

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

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

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

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

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

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

 

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

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

我们来做几个实验

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

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

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

 

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

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

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

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

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

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

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

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

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

 

 

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

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

 

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

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

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

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

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

 5.系统调用产生信号

kill   系统调用接口产生信号

 

 

 

此时我们就通过系统调用kill  产生信号!!!

kill是我要发信号给别人发

raise是我给自己发

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

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

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

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

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

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

 

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

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

我们目前理解的就是:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值