Linux signal与定时器
2024-09-06 16:40:22
1. signal
sighandler_t signal(int signum, sighandler_t handler);
signum:是一个信号。除了SIGKILL和SIGSTOP外的任何一种信号
handler:
- 无返回值的函数地址
- SIG_IGN:忽略参数signum所指的信号
- SIG_DFL:恢复系统对信号的默认处理
注:当一个信号的信号处理函数执行时,如果进程又接收到了该信号,该信号会自动被储存而不会中断信号处理函数的执行,直到信号处理函数执行完毕再重新调用相应的处理函数。但是如果在信号处理函数执行时进程收到了其它类型的信号,该函数的执行就会被中断
查看64信号:
kill -l
2. kill
int kill(pid_t pid, int sig);
- 如果参数pid是正数,那么该调用将信号sig发送到进程号为pid的进程
- 如果pid等于0,那么信号sig将发送给当前进程所属进程组里的所有进程
- 如果参数pid等于-1,信号sig将发送给除了进程1和自身以外的所有进程
- 如果参数pid小于-1,信号sig将发送给属于进程组-pid的所有进程
- 如果参数sig为0,将不发送信号
3. pause
int pause(void);
当前的进程暂停(进入睡眠状态),直到被信号(signal)所中断
4. alarm
unsigned int alarm(unsigned int seconds);
说明:后一次设定将取消前一次的设定
注:一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替
返回值:返回上一个闹钟时间的剩余时间,否则返回0
信号:SIGALRM
5. setitimer
要求不太精确的话,使用alarm()和signal()就行了,但是如果想要实现精度较高的定时功能的话,就要使用setitimer函数
int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
struct itimerval
{
struct timeval it_interval; //下一次的取值
struct timeval it_value; //本次的设定值
};
struct timeval
{
long tv_sec; //秒
long tv_usec; //微秒,1秒 = 1000000 微秒
};
which:
- ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM信号
- ITIMER_VIRTUAL: -以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号
- ITIMER_PROF: 以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号
it_interval:指定间隔时间
it_value:指定初始定时时间
- 如果只指定it_value,就是实现一次定时
- 如果同时指定 it_interval,则超时后,系统会重新初始化it_value为it_interval,实现重复定时
- 两者都清零,则会清除定时器
tv_sec:提供秒级精度
tv_usec:提供微秒级精度,以值大的为先
old_value:用来保存先前的值,常设为NULL
最新文章
- 项目分析_xxoo-master
- ps工具箱总结
- QT socket相关
- Oracle索引失效问题:WHERE C1='' OR C2 IN(SubQuery),并发请求时出现大量latch: cache buffers chains等待
- [数据库]关于MAX()函数的一个坑
- 20个最漂亮的基于WordPress的企业网站
- 庆祝POPTEST签约企业培训
- Visual Studio中将打开的代码与类文件进行关联
- Smarty3.1.3安装使用
- UNIX环境高级编程——进程环境
- pig的grunt中shell命令不稳定,能不用尽量不用
- UOJ#36. 【清华集训2014】玛里苟斯 线性基
- mongodb cxx driver学习
- 180510.最近踩过和听过的sql的坑
- [py]类的专有方法
- 赞 ( 84 ) 微信好友 新浪微博 QQ空间 180 SSD故事会(14):怕TLC因为你不了解!【转】
- Confluence 6 权限概述
- B. Berland National Library---cf567B(set|模拟)
- 第七章 ReentrantLock总结
- Android之使用XMLPull解析xml(二)
热门文章
- 浅入浅出 Go 语言接口的原理
- BayaiM__MYSQL千万级数据量的优化方法积累__初级菜鸟
- GIL全局解释器锁、死锁、递归锁、线程队列
- Mysql—索引原理与详解
- 海思屏幕HAL代码解析
- [日常] 使用TCPDUMP和Ethereal抓包分析HTTP请求中的异常情况
- GitHub 注册失败的原因 以及解决 。
- Educational Codeforces Round 78 (Rated for Div. 2) 题解
- <;Math>; 258 43
- hdu6494 dp