Linux 进程通信 -- 信号

一、概述

信号用于保持进程间的通信,可以备发送到一个进程或者一组进程,发送给进程的这个唯一信息通常是标志信号的一个数。信号可从键盘终端产生、虚拟内存中非法访问系统资源等情况下产生。信号异步发生,收到信号的进程可以采取某种动作或者忽略,大多数信号可以被阻塞。

对于每一个信号,进程可以采取一下三种措施进行动作或忽略:

  1. 忽略信号。收到信号的进程将忽略该信号,对该进程无任何影响。需要注意的是有两个信号不能被忽略:SIGKILLSIGSTOP.
  2. 执行这个信号相关的操作。由内核预定义的这个操作依赖于信号的类型,默认操作主要包括:忽略;终止进程;核心转储文件;停止进程;执行之前被暂停的进程。
  3. 调用相应的信号处理函数,类似中断操作。当进程收到信号时,信号处理函数被调用,当从信号处理函数返回后,被中断的进程将从其断点处重新开始执行。

二、Linux支持的信号

编号1~31的信号是传统UNIX支持的信号,是不可靠信号(非实时信号);编号为32~64的信号是后来扩充的,可靠信号(实时信号)。非实时信号不支持排队操作,可能造成信号丢失。

1、SIGHUP

在用户终端连接(正常或非正常)结束时发出,通常是在终端的控制进程结束时,通知同一Session内的各个作业,登陆Linux时,系统分配给登陆用户一个终端(Session)。当用户退出Linux时,前台进程组合后台进程组当中,有对终端输出的进程将收到这个SIGHUP信号。这个信号的默认操作为终止进程,因此前后台进程中有终端输出的进程会终止。wegt能捕获这个信号,并忽略。

2、SIGINT

程序终止信号,在用户输出INTR字符(通常是Ctrl+C)时发出,用于通知前台进程组终止进程。

3、SIGQUIT

和SIGINT类似,但由QUIT字符来控制。进程收到SIGQUIT退出时会产生core文件,类似于一个程序错误的信号。

4、SIGILL

执行非法指令。通常是因为可执行文件本身出错,或者执行错误程序段。堆栈溢出亦可能产生。

5、SIGTRAP

由断点指令或其他trap产生,由debugger使用。

6、SIGABRT

调用abort函数生成的信号。

7、SIGBUS

非法地址,包括内存地址对齐(alignment)出错。

8、SIGFPE

在发生致命错误的运算错误时发出。比如浮点运算出错,溢出及除数为0等其他所有的算数错误。

9、SIGKILL

立即结束程序的运行,无法被阻塞、处理和忽略。

10、SIGUSR1

用户保留使用。

11、SIGSEGV

试图访问未分配给自己的内存,或者试图往没有写权限的内存地址写数据。

12、SIGUSR2

用户保留使用。

13、SIGPIPE

管道破裂。读取管道没打开或者意外终止往管道写,写进程就会收到SIGPIPE信号。

14、SIGALRM

时钟定时信号,计算的是实际时间或时钟时间,alarm使用该信号。

15、SIGTERM

程序结束(terminate)信号,与SIGKILL不同,SIGTERM可以被阻塞和处理。通常永爱要求程序自己正常退出,shell命令kill 默认产生这个信号。

16、SIGSTKFLT

Linux专用,数学协处理器的栈异常。

17、SIGCHLD

子进程结束时,父进程会受到的信号。如果父进程没有处理这个信号,也没有等待子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。

18、SIGCONT

让一个停止(Stopoed)的进程继续执行,不可被阻塞,可以用一个handler来让程序在有停止状态变为继续执行时完成特定的工作,例如重新显示提示符。

19、SIGSTOP

停止程序的执行,进程未结束,只是暂停执行,不可被阻塞、忽略或处理。

20、SIGTSTP

停止进程的运行,但该信号可以被处理和忽略,用户输入SUSP(通常是Ctrl+z)发出。

21、SIGTTIN

当后台作业要从用户终端读数据时,该作业中的所有进程会受到SIGTITN信号。默认时这些进程会停止执行。

22、SIGTTOU

类似SIGTTIN,在写终端、修改终端模式时收到。

23、SIGURG

有‘紧急’数据或带外(out-of-band)数据到达socket时产生。

24、SIGXCPU

超过CPU时间资源限制,可由getrlinit/setrlimit来读取或改变。

25、SIGXFSZ

进程试图扩大文件,以至于超过文件大小的资源限制。

26、SIGVTALRM

虚拟时钟信号。类似于SIGALRM,计算进程占用的CPU时间。

27、SIGPROF

包括进程占用的CPU时间以及系统调用的时间。

28、SIGWINCH

窗口大小改变时发出。

29、SIGIO

文件描述符准备就绪,可以开始进行输入、输出操作。

30、SIGPWR

电源失败。

31、SIGSYS

非法的系统调用。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值