首页 > 其他 > 详细

【APUE】信号

时间:2014-07-16 20:47:22      阅读:266      评论:0      收藏:0      [点我收藏+]

一、信号概念

信号都被定义为正整数,不存在编号为0的信号。

信号是异步事件的经典实例。产生信号的事件对进程而言是随机出现的,进程不能简单地测试一个变量来判别是否出现了一个信号,而是必须告诉内核在此信号出现时,请执行下列操作。

信号的处理有三种方式:

1.忽略此信号。大多数信号都可使用这种方式进行处理,SIGKILL和SIGSTOP不能被忽略,它们向超级用户提供了使进程终止或停止的可靠方法。

2.捕捉信号,通知内核在某种信号发生时调用一个用户函数。注意:不能捕捉SIGKILL和SIGSTOP信号

3.执行系统默认动作。

 二、signal函数

#include <signal.h>

void (*signal(int signo,void (*func)(int)))(int);

返回值:若成功则返回信号以前的处理配置,若出错则返回SIG_ERR

signo参数是信号名,func的值是常量SIG_IGN、常量SIG_DFL或当接到此信号后要调用的函数的地址。SIG_IGN表示忽略此信号,SIG_DFL表示接到此信号后的动作是系统默认动作。当指定函数地址时,则在信号发生时,调用该函数。func的参数可以从shell中接收。

1.程序调用

当执行一个程序时,所有信号的状态都是系统默认或忽略,通常所有信号都被设置为它们的默认动作,除非调用exec的进程忽略该信号。确切的讲,exec函数将原先设置为要捕捉的信号都更改为它们的默认动作,其他信号的状态不变。

2.进程创建

当一个进程调用fork时,其子进程继承父进程的信号处理方式。

 三、可重入函数

不可重入的原因:a)使用静态数据结构;b)调用malloc或free;c)标准I/O函数

 

 

 

 

 

 

 

 

 

 

【APUE】信号,布布扣,bubuko.com

【APUE】信号

原文:http://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3836528.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!