信号的概述


信号的概述

信号是软件中断,它是在软件层次上对中断机制的一种模拟。
信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。信号是一种异步通信方式。

进程不必等待信号的到达,进程也不知道信号什么时候到达。
信号可以直接进行用户进程和内核空间进程的交互,内核进程可以利用它来通知用户空间进程发生了哪些系统事件。

每个信号的名字都以字符SIG开头
每个信号和一个数字编码相对应,在头文件signum.h中 ,这些信号都被定义为正整数。

信号名定义路径:
/user/include/i386-linux-gnu/bits/signum.h(ubuntu12.04)

在这里插入图片描述

在Linux下,要想查看这些信号和编码的对应关系,可使用命令:kill -l

在这里插入图片描述

产生信号的方式

1.当用户按某些终端键时,将产生信号
例如:
终端上按“Ctrl+c” 组合键通常产生中断信号SIGINT、
终端上按“Ctrl+\” 键通常产生中断信号SIGQUIT、
终端上按“Ctrl+z”键通常产生中断信号SIGTOP。

2.硬件异常将产生信号
除数为0,无效的内存访问等。

3.软件异常将产生信号
当检测到某种软件条件已发生,并将其通知有关进程时,产生信号。

4.调用kill函数将发送信号
注意:接收信号进程和发送信号进程的所有者必须相同,或发送信号进程的所有者必须是超级用户。

5.运行kill命令将发送信号
此程序实际上是使用kill函数来发送信号。也常用此命令终止一个失控的后台进程。

信号的默认(缺省)处理方式

当进程中产生了一个信号,就会让当前进程做出一定的反应,

默认处理进程的方式如下:

1、终止进程: 当信号产生时,当前进程就会立即结束
2、缺省进程: 当信号产生时,当前进程不作任何处理
3、停止进程: 当信号产生时,使得当前进程停止
4、让停止的进程恢复运行: 当信号产生后,停止的进程会恢复执行(后台进程)
**注意:**每一个信号只有一个默认的处理方式

进程接收到信号后的处理方式

1、执行系统默认动作
对大多数信号来说,系统默认动作是用来终止进程。
2、忽略此信号
接受此信号后没有任何动作
3、执行自定义信号处理函数
用用户定义的信号处理函数处理该信号。

注意: SIGKILLSIGSTOP这两个信号只能以默认的处理方式执行,不能忽略也不能自定义

常见的信号

信号性质默认处理方式
SIGKILL9当产生这个信号后,当前进程会退出,不能被缺省或捕捉退出进程
SIGSTOP19当产生这个信号后,当前进程会停止,不能被缺省或捕捉停止进程
SIGINT2键盘输入Ctrl+c时产生的信号退出进程
SIGQUIT3键盘输入Ctrl+\时产生的信号退出进程
SIGTSTP20键盘输入Ctrl+z时产生的信号停止进程
SIGCONT18当产生当前信号后,当前停止的进程会恢复运行停止的进程恢复运行
SIGALRM14当调用alarm函数设置的时间到达时会产生当前信号退出进程
SIGPIPE13当管道破裂是,会产生当前信号退出进程
SIGABRT6当调用abort函数时,会产生当前信号退出进程
SIGCHLD17当使用fork创建一个子进程时,如果子进程状态改变(退出),会产生当前信号缺省
SIGUSR110用户自定义信号,不会自动产生,只能使用kill函数或者命令给指定的进程发送当前信号缺省
SIGUSR212用户自定义信号,不会自动产生,只能使用kill函数或者命令给指定的进程发送当前信号缺省
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值