linux下信号的使用(编程层面)

                                                            信号

初学linux,为方便使用写的,如有问题,请多多指教。

  • 简介:

信号是linux系统为了响应某些状况而产生的事件。进程收到信号后应该采取相应的动作

Kill -l  可以查看现在的信号量;

  (2) SIGINT   ctrl +c  终止信号
  (3)                ctrl  +\  暂停信号,放入后台 
  (4)               
非法指令

5            abort   进程异常终止

  (7) SIGBUS  (虚实关系建立)       总线错误(从写的位置到物理内存,操作系统没有将磁盘的开始位置到物理内存之间建立      联系   mmap(把虚拟内存和磁盘文件的关系映射起来,如果磁盘大小大于0,就建立这种关系
  (9) SIGKILL  kill - 9 pid  杀死进程
  (11) SIGSEGV 段错误
13 管道破裂
14)闹钟
15 缺省终止某个进程,终止掉
17)子进程死的时候会给父进程发送这个信号
19)进程暂停
23 SIGURG 紧急数据

29 异步 IO

 

在/usr/include/bits/signum.h 从编程的角度下说明每个信号:

  • 函数:

头文件<signal.h>

 

第一个参数是信号的编号,第二个参数就是对于这个信号的响应方式。

响应方式有:1.默认 SIG_DFL 2.忽略 SIG_IGN 3.自定义 自定义的函数名。

 

  • 信号的简单使用:

  1. 第一个,修改2号信号SIGINT(即 ctrl+c)

                     

在这个代码中,我们使用了signal()函数,修改了信号SIGINT的响应方式,对于代码23号,但是不影响我们程序的正常使用,程序不会因此而阻塞,只有系统检测到这个信号的时候,才会产生中断。我们第一遍修改了这个信号的响应方式,使的他打印了1,当第二次的时候,我们就信号的响应方式改回了默认方式,因此出现了如上的结果。

 

如果想要改变三次的话,我们可以在写一个自定义函数,然后改变函数的指向。如上图屏蔽的代码,如果是更多的话,可以以此类推,套娃行为,并且最后一次修改的结果毁一直保存到程序结束的时候。

 

  • 当我们的子进程先于父进程退出的时候,会产生孤儿进程,当然这个时候就产生一个SIGCHLD信号,我们可以铺捉这个信号,来处理这个孤儿进程。

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值