信号概述(Unix && Linux)

信号是 UNIX 中所使用的进程通信的一种古老方法。它是在软件层次上对中断机制的一种模拟,是一种异步通信方式 。信号可以直接进行用户 空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一进程,而无需知道该进程的状态。如 果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它为止;如果一个信号被进程设置为阻塞,则该信号传递被延迟,直到其 阻塞被取消时传递给进程。


使用 kill -l 指令可以列出本机系统所支持的所有信号列表
引用
beyes@linux-beyes:~> kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL
 5) SIGTRAP     6) SIGABRT     7) SIGBUS     8) SIGFPE
 9) SIGKILL    10) SIGUSR1    11) SIGSEGV    12) SIGUSR2
13) SIGPIPE    14) SIGALRM    15) SIGTERM    16) SIGSTKFLT
17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU
25) SIGXFSZ    26) SIGVTALRM    27) SIGPROF    28) SIGWINCH
29) SIGIO    30) SIGPWR    31) SIGSYS    34) SIGRTMIN
35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3    38) SIGRTMIN+4
39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12
47) SIGRTMIN+13    48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14
51) SIGRTMAX-13    52) SIGRTMAX-12    53) SIGRTMAX-11    54) SIGRTMAX-10
55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7    58) SIGRTMAX-6
59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX   

由上面可以看到,信号值在 32 之前的都有不同的名称,而信号值在 32 以后的都是用  SIGRTMINSIGRTMAX 开头,这就是两类典型的信号。前者是从 UNIX 系统中继承下来的信号,为不可靠信号( 也称为非实时信号 );后者是为了解决前面 “不可靠信号” 的问题而进行了更改和扩充的信号,称为“可靠信号”( 也称为实时信号 )。为什么之前的信号不可靠呢?这里先从信号的生命周期看起。

一 个完整的信号生命周期可以分为 3 个重要阶段,这 3 个阶段由 4 个重要事件来刻画的:信号产生、信号在进程中注册、信号在进程中注销、执行信号处理函数:

上图中,相邻的两个事件间隔构成信号生命周期的一个阶段。要注意这里的信号处理有多种方式,一般是由内核完成,当有也可 以由用户进程来完成。

一个不可靠的处理过程是这样的:如果发现该信号已经在进程中注册,那么就忽略该信号。因此,若前一个信号还未注销又 产生了相同的信号就会产生信号丢失。而当可靠信号发送给一个进程时,不管该信号是否已经在进程中注册,都会被再注册一次,因此信号就不会丢失。所有可靠信 号都支持排队,而不可靠信号都不支持排队。

注意
这 里的信号的产生、注册、注销等都是指信号的内部实现机制,而不是信号的函数实现的。

用户进程对信号的响应可以有 3 种方式:
  • 忽略信号,即对信号不做任何处理,但是有两个信号不能忽略,即 SIGKILL 及 SIGSTOP
  • 捕捉信号,定义信号处理函数,当信号发生时,执行相应的处理函数。
  • 执行缺省操 作,Linux 对每种信号都规定了默认操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值