转自:Linux信号(signal)机制

http://gityuan.com/2015/12/20/signal/

一、信号类型

Linux系统共定义了64种信号,分为两大类:可靠信号与不可靠信号,前32种信号为不可靠信号,后32种为可靠信号。

1.1 概念

  • 不可靠信号: 也称为非实时信号,不支持排队,信号可能会丢失, 比如发送多次相同的信号, 进程只能收到一次. 信号值取值区间为1~31;

  • 可靠信号: 也称为实时信号,支持排队, 信号不会丢失, 发多少次, 就可以收到多少次. 信号值取值区间为32~64

1.2 信号表

在终端,可通过kill -l查看所有的signal信号

取值名称解释默认动作
1SIGHUP挂起 
2SIGINT中断 
3SIGQUIT退出 
4SIGILL非法指令 
5SIGTRAP断点或陷阱指令 
6SIGABRTabort发出的信号 
7SIGBUS非法内存访问 
8SIGFPE浮点异常 
9SIGKILLkill信号不能被忽略、处理和阻塞
10SIGUSR1用户信号1 
11SIGSEGV无效内存访问 
12SIGUSR2用户信号2 
13SIGPIPE管道破损,没有读端的管道写数据 
14SIGALRMalarm发出的信号 
15SIGTERM终止信号 
16SIGSTKFLT栈溢出 
17SIGCHLD子进程退出默认忽略
18SIGCONT进程继续 
19SIGSTOP进程停止不能被忽略、处理和阻塞
20SIGTSTP进程停止 
21SIGTTIN进程停止,后台进程从终端读数据时 
22SIGTTOU进程停止,后台进程想终端写数据时 
23SIGURGI/O有紧急数据到达当前进程默认忽略
24SIGXCPU进程的CPU时间片到期 
25SIGXFSZ文件大小的超出上限 
26SIGVTALRM虚拟时钟超时 
27SIGPROFprofile时钟超时 
28SIGWINCH窗口大小改变默认忽略
29SIGIOI/O相关 
30SIGPWR关机默认忽略
31SIGSYS系统调用异常 

对于signal信号,绝大部分的默认处理都是终止进程或停止进程,或dump内核映像转储。 上述的31的信号为非实时信号,其他的信号32-64 都是实时信号。

二、信号产生

信号来源分为硬件类和软件类:

2.1 硬件方式

  • 用户输入:比如在终端上按下组合键ctrl+C,产生SIGINT信号;
  • 硬件异常:CPU检测到内存非法访问等异常,通知内核生成相应信号,并发送给发生事件的进程;

2.2 软件方式

通过系统调用,发送signal信号:kill(),raise(),sigqueue(),alarm(),setitimer(),abort()

  • kernel,使用 kill_proc_info()等
  • native,使用 kill() 或者raise()等
  • java,使用 Procees.sendSignal()等
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值