Linux系统编程------信号相关概念(kill、alarm、setitimer函数)

  1. 信号共性
    简单、不能携带大量信息、满足条件才发送。

  2. 信号特质
    信号是软件层面的“中断”,一旦信号产生,正在执行的程序必须停止,处理信号,结束后继续执行程序;
    信号的产生和处理是由 内核 完成的。

  3. 信号产生方式:
    1、按键产生;2、系统调用;3、软件条件产生;4、硬件异常;5、命令产生

  4. 相关概念
    1、未决:产生于递达之间的状态;
    2、递达:产生并送达进程,直接被内核处理;
    3、信号处理方式:执行默认处理动作、忽略、捕捉(自定义)
    4、阻塞信号集(信号屏蔽字):本质:位图,用于记录信号的屏蔽状态,一旦信号被屏蔽,解除屏蔽前,信号将一直处于未决态。
    5、未决信号集:本质:位图,用于记录信号的处理状态,该信号集中的信号,表示已经产生但尚未被处理。

  5. 信号四要素
    信号使用前应先确定信号四要素。
    信号编号、信号名称、信号对应事件、信号默认处理动作。
    在这里插入图片描述
    在这里插入图片描述

9)SIGKILL:无条件终止进程。本信号不能被忽略、处理和阻塞。默认动作为终止进程。向系统管理员提供了杀死任何进程的方法。
19)SIGSTOP:停止进程执行,信号不能被忽略、处理和阻塞。默认动作暂停进程

  1. kill命令和kill函数

int kill(pid_t pid, int signum)
pid:
大于0: 发送信号给指定进程
等于0: 发送信号给跟调用kill函数的那个进程出于同一进程组的进程
小于-1:取绝对值,发送信号给该绝对值所对应的进程组的所有组员
等于-1:发送信号给有权限发送的所有进程

  1. alarm函数
    每个进程有且只有一个定时器。
    定时发送SIGALARM给当前进程。
    使用自然计时法。

unsigned int alarm(unsigned int seconds);
seconds:定时秒数
返回值:上次定时剩余时间,无错误现象。
time 命令:查看程序执行时间。实际执行时间=用户时间+内核时间+等待时间–》优化瓶颈:IO。

  1. setitimer函数

int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
which为定时器类型,setitimer支持3种类型的定时器:
ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM信号。
ITIMER_VIRTUAL: 以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。
ITIMER_PROF: 以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号。
new_value:定时秒数
itimerva类型:

struct itimerval {
struct timeval it_interval; /* Interval for periodic timer /
struct timeval it_value; /
Time until next expiration /
};
struct timeval {
time_t tv_sec; /
seconds /
suseconds_t tv_usec; /
microseconds */
};
it_interval指定间隔时间,it_value指定初始定时时间。如果只指定it_value,就是实现一次定时;如果同时指定 it_interval,则超时后,系统会重新初始化it_value为it_interval,实现重复定时;两者都清零,则会清除定时器。
eg:
struct itimerval new_t;
struct itimerval old_t;
new_t.it_interval.tv_sec=1;
new_t.it_interval.tv_usec=0;
new_t.it_value.tv_sec=0;
new_t.it_value.tv_usec=0;
setitimer(&new_t, &old_t);

old_value:传出时间,上次剩余时间;
返回值:成功:0;失败:-1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值