linux signal

http://blog.csdn.net/zhuixundelang/article/details/5979465

 

简介 

Unix 为了允许用户态进程之间的通信而引入signal.  此外,  内核使用signal 给进程通知系统事件.  近30 年来, signal 只有很小的变化 .

以下我们先介绍linux kernel 如何处理signal, 然后讨论允许进程间     exchange 信号的系统调用 .

 

The Role of Signals  

signal 是一种可以发送给一个进程或一组进程的短消息( 或者说是信号 , 但是这么容易和信号量混淆).  这种消息通常只是一个整数 , 而不包含额外的参数 .

linux 提供了很多种signal,  这些signal 通过宏来标识( 这个宏作为这个信号的名字).  并且这些宏的名字的开头是SIG.eg:   宏SIGCHLD  , 它对应的整数值为17, 用来表示子进程结束时给父进程发送的消息 ( 即当子进程结束时应该向父进程发送标识符为17 的signal/ 消息/ 信号)  . 宏SIGSEGV,  它对应的整数值为11, 当进程引用一个无效的物理地址时( 内核) 会向进程发送标识符为11 的signal/ 消息/ 信号 ( 参考linux 内存管理的页错误异常处理程序,  以及linux 中断处理). 

信号有两个目的:
1. 使一个进程意识到一个特殊事件发生了( 不同的事件用不同的signal 标识) 
2. 并使目标进程进行相应处理(eg:  执行的信号处理函数 , signal handler). 相应的处理也可以是忽略它 .

当然 , 这两个目的不是互斥的 , 因为通常一个进程意识到一个事件发生后就会执行该事件相应的处理函数 .

下表是linux2.6 在80x86 上的前31 个signals 及其相关说明 . 这些信号中有些是体系结构相关的(eg:SIGCHLD,SIGSTOP), 有些则专门了某些体系结构才存在的(eg:SIGSTKFLT) ( 可以参考中断处理 , 里面也列出了一些异常对应的signal). 

 

The first 31  signals in Linux/i386

#

Signal name

Default  action

Comment

POSIX

1

SIGHUP

Terminate

Hang up  controlling terminal or process

Yes

2

SIGINT

Terminate

Interrupt  from keyboard

Yes

3

SIGQUIT

Dump

Quit from  keyboard

Yes

4

SIGILL

Dump

Illegal  instruction

Yes

5

SIGTRAP

Dump

Breakpoint  for debugging

No

6

SIGABRT

Dump

Abnormal  termination

Yes

6

SIGIOT

Dump

Equivalent  to  SIGABRT

No

7

SIGBUS

Dump

Bus error

No

8

SIGFPE

Dump

Floating-point  exception

Yes

9

SIGKILL

Terminate

Forced-process  termination

Yes

10

SIGUSR1

Terminate

Available to  processes

Yes

11

SIGSEGV

Dump

Invalid  memory reference

Yes

12

SIGUSR2

Terminate

Available to  processes

Yes

13

SIGPIPE

Terminate

Write to  pipe with no readers

Yes

14

SIGALRM

Terminate

Real-timerclock

Yes

15

SIGTERM

Terminate

Process  termination

Yes

16

SIGSTKFLT

Terminate

Coprocessor  stack error

No

17

SIGCHLD

Ignore

Child  process stopped or terminated, or got signal if traced

Yes

18

SIGCONT

Continue

Resume  execution, if stopped

Yes

19

SIGSTOP

Stop

Stop process  execution

Yes

20

SIGTSTP

Stop

Stop process  issued from tty

Yes

21

SIGTTIN

Stop

Background  process requires input

Yes

22

SIGTTOU

Stop

Background  process requires output

Yes

23

SIGURG

Ignore

Urgent  condition on socket

No

24

SIGXCPU

Dump

CPU time limit  exceeded

No

25

SIGXFSZ

Dump

File size  limit exceeded

No

26

SIGVTALRM

Terminate

Virtual  timer clock

No

27

SIGPROF

Terminate

Profile  timer clock

No

28

SIGWINCH

Ignore

Window  resizing

No

29

SIGIO

Terminate

I/O now  possible

No

29

SIGPOLL

Terminate

Equivalent  to  SIGIO

No

30

SIGPWR

Terminate

Power supply  failure

No

31

SIGSYS

Dump

Bad system  call

No

31

SIGUNUSED

Dump

Equivalent  to  SIGSYS

No

 

 

上述signal 称为regular signal .  除此之外, POSIX 还引入了另外一类singal 即real-time signal   .  real time signal 的标识符的值从32 到64. 它们与reagular signal 的区别在于每一次发送的real time signal 都会被加入悬挂信号队列,所以多次发送的real time signal 会被缓存起来( 而不会导致后面的被忽略掉)  .  而同一种( 即标识符一样) regular signal 不会被缓存,  即如果同一个signal 被发送多次 , 它们只有一个会被放入接受进程的悬挂队列 .

 

虽然linux kernel 并没有使用real time signal.  但是它也( 通过特殊的系统调用) 支持posix 定义的real time signal.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值