一、kill
kill : 给指定的进程法信号。
(1)头文件:
#include <sys/types.h>
#include <signal.h>
(2)函数原型:
int kill(pid_t pid, int sig);
(3)参数:
pdi > 0: 定向发送
pdi = 0 :同组所有进程
pdi = -1 :有权利发送的所有进程
pdi < -1 :指定组 id 内的所有进程(取反)
sig :发出的信号(建议写宏,不写数字)
(4)返回值:
成功: 0
失败:-1
二、raise
raise : 给自己发信号 。
函数原型:
int raise(int sig);
等价于 int kill(getpid(), int sig);
三、abort
abort :给自己发异常终止信号(SIGABRT / 6 号)并产生 core 文件。
函数原型:
void abort(void);
四、alarm
定时器alarm 函数:当时间到达之后,函数发出一个信号 :SIGALR(14)。
(1)函数原型:
unsigned int alarm(unsigned int seconds);
(2)参数:秒(多少秒后发出信号),取 0 代表取消闹钟。
(3)返回值:上一个定时还有多少时间发信号。
注意:
(1)使用的是自然定时法则(时间运行是绝对的,不受进程影响,比如进程卡顿,时间照走)。按照实际使用时间计量“用户使用时间 + 内核使用时间 + 损耗时间”。
(2)每个进程只能有一个定时器。
五、setitimer
setitimer 函数:实现周期式定时。
(1)函数原型:
int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
(2)参数:
1)which:(定时法则 – 信号) 重点在于法则和信号的对应关系,为了知道该捕捉那个信号,详细如下:
ITIMER_REAL – SIGALRM :自然法则 “用户 + 内核 + 损耗”。
TIMER_VIRTUAL – SIGVTALRM : 按照“用户”计量。
ITIMER_PROF – SIGPROF :按照“用户 + 内核”计量。
2) struct itimerval * new_value:用于设置闹钟
首先认识 2 个结构体(嵌套关系)
struct itimerval // 外层结构体 -- 我们最终要用的
{
struct timeval it_interval; // 设置周期
struct timeval it_value; // 设置第一次闹钟时间
};
struct timeval // 内层结构体 -- 更精准的修饰时间(相加关系)
{
time_t tv_sec; // sec 秒钟
suseconds_t tv_usec; // usec 微秒
};
结构体使用方法:
例如
struct itimerval new_value = { {5, 300}, {2, 100} };//第一个定时器为 2 秒 100 微秒后,以后定时器时间间隔为 5 秒 300 微秒
3)struct itimerval *old_value:上一个定时器的属性,一般传 NULL。
整体使用:
struct itimerval new_value = { {5, 0}, {2, 0} };
setitimer( ITIMER_REAL, &new_value, NULL ); //采用自然法则,第一个闹钟为 2s 后,周期 5s