栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;
};
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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/964362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号