Linux学习之系统编程篇:与产生信号有关的函数

一、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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值