![](https://csdnimg.cn/release/download_crawler_static/1778946/bg4.jpg)
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));
setitimer()
比
alarm
功能强大,支持
3
种类
型
的
定
时器:
• ITIMER_REAL
:
设
定绝
对时间;经过指
定
的时间后,
内核
将发送
SIGALRM
信号给本进程;
• ITIMER_VIRTUAL
设
定
程
序
执行时间;经过指
定
的时间后,
内核
将发送
SIGVTALRM
信号给本
进程;
• ITIMER_PROF
设
定
进程执行以及
内核
因本进程
而消耗
的时间和,经过指
定
的时间后,
内核
将发
送
ITIMER_VIRTUAL
信号给本进程;
Setitimer()
第
一个
参
数
which
指
定定
时器类
型
(上面
三
种
之
一);
第二
个
参
数是结
构
itimerval
的一个实例,
结
构
itimerval
形式见
附
录
1
。
第三
个
参
数可不做处理。
Setitimer()
调用
成
功
返回
0
,
否则返回
-1
。
6
、
、、
、
abort()
#include <stdlib.h>
void abort(void);
向
进程发送
SIGABORT
信号,默认情况下进程
会
异常
退
出,
当然
可
定义自己
的信号处理函数。
即使
SIGABORT
被
进程设置为
阻塞
信号,调用
abort()
后,
SIGABORT
仍然
能
被
进程接收。该函数
无返回
值。
五
五五
五、
、、
、信号的安装
信号的安装信号的安装
信号的安装(
((
(设置信号关联动作
设置信号关联动作设置信号关联动作
设置信号关联动作)
))
)
如果进程要处理某一信号,那么就要在进程中安装该信号。安装信号主要用来
确定
信号值及进程
针
对
该信号值的动作
之
间的
映射
关系,
即
进程将要处理哪个信号;该信号
被
传递给进程时,将执行何种操作。
linux
主要有两个函数实现信号的安装:
signal()
、
sigaction()
。其中
signal()
在可靠信号系统调用的基
础
上
实现
,
是
库
函数。它
只
有两个
参
数,不支持信号传递信息,主要是用于
前
32
种非实时信号的安装;
而
sigaction()
是较新的函数(
由
两个系统调用实现:
sys_signal
以及
sys_rt_sigaction
),有
三
个
参
数,支持
信号传递信息,主要用来与
sigqueue()
系统调用
配合使
用,
当然
,
sigaction()
同样支持非实时信号的安装。
sigaction()
优
于
signal()
主要
体
现在支持信号
带
有
参
数。
1
、
、、
、
signal()
#include <signal.h>
void (*signal(int signum, void (*handler))(int)))(int);
如果该函数原
型
不
容易
理
解
的
话
,可以
参考
下面的分
解
方
式
来理
解
:
typedef void (*sighandler_t)(int)
;
sighandler_t signal(int signum, sighandler_t handler));
第
一个
参
数指
定
信号的值,
第二
个
参
数指
定针
对
前
面信号值的处理,可以
忽略
该信号(
参
数设为
SIG_IGN
);
可以
采
用系统默认方
式
处理信号
(
参
数设为
SIG_DFL)
;也可以
自己
实现处理方
式
(
参
数指
定
一个函数
地址
)
。
如果
signal()
调用
成
功,
返回
最后一次为安装信号
signum
而
调用
signal()
时的
handler
值;失
败则返回
SIG_ERR
。
2
、
、、
、
sigaction()
#include <signal.h>
int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact));
sigaction
函数用于改
变
进程接收到
特定
信号后的行为。该函数的
第
一个
参
数为信号的值,可以为除
SIGKILL
及
SIGSTOP
外的任何一个
特定
有
效
的信号(为这两个信号
定义自己
的处理函数,将导致信号安装错误)。
第二
个
参
数是指
向
结
构
sigaction
的一个实例的指
针
,在结
构
sigaction
的实例中,指
定
了对
特定
信号的处
理,可以为
空
,进程
会
以
缺省
方
式
对信号处理;
第三
个
参
数
oldact
指
向
的对象用来
保存
原来对相应信号的
处理,可指
定
oldact
为
NULL
。如果把
第二、第三
个
参
数都设为
NULL
,那么该函数可用于
检查
信号的有
效
性。