Linux-信号处理
上一篇 /
下一篇 2012-07-04 11:36:55
/ 个人分类:Linux
51Testing软件测试网"p6DB]8B;}i 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。51Testing软件测试网.u'B3?)NmX+o:o
p3{&Kqv0 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。
c%]7I'p5`vy(|w{3D051Testing软件测试网(F(Cm9?`2?f#k 每个信号都有一个名字,以SIG打头。常见的SIGINT( 终端终止符)、SIGABRT(异常终止,abort()产生)、SIGUSR1(用户定义的信号)等。51Testing软件测试网TDoWm!{]r|
51Testing软件测试网&\+~NAfH 当信号产生,有三种方式处理该信号
7vhucJi%g[f0/u.x6N0zB4~0 1、忽略信号,两种信号(SIGKILL,SIGSTOP不能忽略)
CvTig051Testing软件测试网FV.u7JQ\ 2、捕捉信号,用户可以自己定义函数用于处理该信号。51Testing软件测试网+l8v"K4s5{#}Rg
P"PJ1{(e+zT0 3、执行系统默认动作,一般默认动作是终止进程51Testing软件测试网;kU@W7tsEJ8H
51Testing软件测试网#Xb,_4^]%k 在某些情况下,我们需要捕捉信号。比如说,之前编写的echo服务器,服务端按ctrl+c产生SIGINT信号,终止服务端程序。但是某些时候,我需要在终止程序前,做一些善后工作,如释放申请的内存空间,以免造成内存泄露。所以信号捕捉是有用的。
BA Td!z;I(ZG#J0P.w4YR
\*u&d0 可以使用signal为信号指定信号处理函数,也可以使用sigaction。现在推荐使用sigaction。51Testing软件测试网h%A
Fzn {
p5{
#include <signal.h> //信号头文件
|