linux信号

来源:互联网 发布:台湾人逛淘宝的感想 编辑:程序博客网 时间:2024/06/05 03:10

http://book.51cto.com/art/201604/510323.htm

5.3.2 信号(1)

《Linux环境编程图文指南》本书内容翔实,囊括了Linux系统操作细节,Shell脚本编程精要,各种编程环境所需要解决的技术难点,以及在Linux环境下的C语言编程技术、并发编程技术和音/视频编程等核心内容。本节为大家介绍信号。

作者:林世霖/钟锦辉/李建辉来源:电子工业出版社|2016-04-28 18:30
 移动端
 收藏
  分享

沙龙活动 | 去哪儿、陌陌、ThoughtWorks在自动化运维中的实践!10.28不见不散!


5.3.2  信号(1)

信号是一种比较特殊的IPC,大部分的信号是异步的。换句话讲,一般情况下,进程什么时候会收到信号、收到什么信号是无法事先预料的(除了某几个特殊的信号之外),信号的到来就像你家门铃响起一样,你不知道它什么时候会响。

先来看看Linux系统中,都有哪些信号,如表5-8所示。

可以看到,Linux系统有许多信号,其中前面31个信号都有一个特殊的名字,对应一个特殊的事件。例如,1号信号SIGHUP(Signal Hang UP),表示每当系统中的一个控制终端被关闭(即挂断,Hang Up)时,即会产生这个信号,有时会将它们称为非实时信号,这些信号都是从UNIX系统继承下来的,它们还有个名称叫"不可靠信号",它们有如下特点。

表5-8  Linux系统的信号

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  SGIVTALRM

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-9

64  SIGRTMAX

 

 

 

(1)非实时信号不排队,信号的响应会相互嵌套。

(2)如果目标进程没有及时响应非实时信号,那么随后到达的该信号将会被丢弃。

(3)每一个非实时信号都对应一个系统事件,当这个事件发生时,将产生这个信号。

(4)如果进程的挂起信号中含有实时和非实时信号,那么进程优先响应实时信号并会从大到小依次响应,而非实时信号没有固定的次序。

后面的31个信号(从SIGRTMIN[34] 到 SIGRTMAX[64])是Linux系统新增的实时信号,也称为"可靠信号",这些信号的特点如下。

(1)实时信号的响应次序按接收顺序排队,不嵌套。

(2)即使相同的实时信号被同时发送多次,也不会被丢弃,而会依次逐个响应。

(3)实时信号没有特殊的系统事件与之对应。

上述特征在后面介绍完信号相关核心的API之后,都可以一一验证。表5-9所示是非实时信号的详细介绍。

表5-9  信号的值、默认响应动作以及产生的原因

信    号

默认动作

备注

SIGHUP

1

终止

控制终端被关闭时产生

SIGINT

2

终止

从键盘按键产生的中断信号(如Ctrl+C

SIGQUIT

3

终止并产生转储文件

从键盘按键产生的退出信号(如Ctrl+\

SIGILL

4

终止并产生转储文件

执行非法指令时产生

SIGTRAP

5

终止并产生转储文件

遇到进程断点时产生

SIGABRT

6

终止并产生转储文件

调用系统函数abort( )时产生

SIGBUS

7

终止并产生转储文件

总线错误时产生

SIGFPE

8

终止并产生转储文件

处理器出现浮点运算错误时产生

SIGKILL

9

终止

系统杀戮信号

SIGUSR1

10

终止

用户自定义信号

SIGSEGV

11

终止并产生转储文件

访问非法内存时产生

续表

信    号

默认动作

备注

SIGUSR2

12

终止

用户自定义信号

SIGPIPE

13

终止

向无读者的管道输入数据时产生

SIGALRM

14

终止

定时器到时间时产生

SIGTERM

15

终止

系统终止信号

SIGSTKFLT

16

终止

已废弃

SIGCHLD

17

忽略

子进程暂停或终止时产生

SIGCONT

18

恢复运行

系统恢复运行信号

SIGSTOP

19

暂停

系统暂停信号

SIGTSTP

20

暂停

由控制终端发起的暂停信号

SIGTTIN

21

暂停

后台进程发起输入请求时控制终端产生该信号

SIGTTOU

22

暂停

后台进程发起输出请求时控制终端产生该信号

SIGURG

23

忽略

套接字上出现紧急数据时产生

SIGXCPU

24

终止并产生转储文件

处理器占用时间超出限制值时产生

SIGXFSZ

25

终止并产生转储文件

文件尺寸超出限制值时产生

SIGVTALRM

26

终止

由虚拟定时器产生

SIGPROF

27

终止

profiling 定时器到时间时产生

SIGWINCH

28

忽略

窗口大小变更时产生

SIGIO

29

终止

I/O变得可用时产生

SIGPWR

30

终止

启动失败时产生

SIGUNUSED

31

终止并产生转储文件

SIGSYS

对以上信号,需要着重注意如下问题。

(1)表5-6中罗列出来的信号的"值",在x86、PowerPC和ARM平台下是有效的,但是别的平台的信号值也许和表5-9的值不一致。

(2)"备注"中注明的事件发生时会产生相应的信号,但并不是说该信号的产生就一定发生了这个事件。事实上,任何进程都可以使用函数kill( )来产生任何信号。

(3)信号SIGKILL和SIGSTOP是两个特殊的信号,它们不能被忽略、阻塞或捕捉,只能按默认动作来响应。换句话说,除了这两个信号之外的其他信号,接收信号的目标进程按照如下顺序做出反应。

① 如果该信号被阻塞,那么将该信号挂起,不对其做任何处理,等到解除对其阻塞为止。否则进入第②步。

② 如果该信号被捕捉,那么进一步判断捕捉的类型:

如果设置了响应函数,那么执行该响应函数。

如果设置为忽略,那么直接丢弃该信号。

否则进入第③步。

③ 执行该信号的默认动作。

对信号有了初步的认识之后,下面分几部分来阐述这种通信机制。

喜欢的朋友可以添加我们的微信账号:

原创粉丝点击