异步处理方式之信号(三):kill、raise、alarm、pause函数简介
发布日期:2021-06-23 04:43:37
浏览次数:10
分类:技术文章
本文共 1686 字,大约阅读时间需要 5 分钟。
文章目录
6. 函数kill和raise
- kill函数用来将信号发送给进程或者进程组。
- raise函数则是进程用来向本进程发送信号的。
#includeint kill(pid_t pid, int signo);int raise(int signo); 返回值说明:成功返回0;失败返回-1
调用
raise(signo);
相当于调用
kill(getpid(), signo);
函数kill的pid参数有以下四种不同的情况
序号 | pid范围 | 说明 |
---|---|---|
1 | pid > 0 | 将信号发送给进程ID为pid的进程 |
2 | pid == 0 | 将信号发送给与当前进程属于同一进程组的所有进程(进程组ID相同的进程),当然这里不包括系统进程和内核进程 |
3 | pid < 0 | 将信号发送给进程组ID等于|pid|的所有进程。同样不包括系统进程和内核进程 |
4 | pid == -1 | 将信号发送给具有权限的其他所有进程 |
这里面有一个前提: 要么是超级用户,拥有所有的权限。要么是拥有相同进程ID的进程,否则无法发送信号给其他进程。
7. 函数alarm和pause
7.1 alarm()
使用alarm函数用来设置一个定时器,在将来的某一时间该定时器会超时。当定时器超时时,产生SIGALRM信号。如果忽略或者不捕捉该信号,则执行默认的动作:终止当前进程
。
#includeunsigned int alarm(unsigned int seconds); 返回值说明: 0或者以前设置的闹钟时间剩余的秒数。
参数seconds的值是产生SIGALRM信号需要经过的秒数。当定时时间到时由内核产生,但是由于进程调度的延时,时间上有一定的延时。
每一个进程只允许有一个闹钟时间:
/************************************************************************* > File Name: alarm.c > Author: Toney Sun > Mail: vip_13031075266@163.com > Created Time: 2020年04月27日 星期一 17时35分42秒 ************************************************************************/#include#include void alarm_test(void){ int ret; ret=alarm(10); printf("First alarm :ret = %d\n", ret); sleep(2); ret=alarm(2); printf("Second alarm :ret = %d\n", ret);}
验证结果如下:
toney@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器$ ./demo.out First alarm :ret = 0Second alarm :ret = 8Alarm clock
这会引入一个问题: 如果先前该进程已经注册了一个闹钟时间,但是还没有超时;如果重新设置定时器,先前剩余的时间会最为alarm()函数的返回值返回,与此同时,以前注册的闹钟时间被取代而不再生效。 如果有以前注册的尚未超时的闹钟时间,而且本地设置的seconds为0,则是取消该闹钟,剩余的时间仍然作为alarm函数的返回值。
7.2 pause()
pause函数使调用进程挂起,直至捕捉到某个信号。
#includeint pause(void); 返回值:-1, errno设置为EINTR
只有执行了一个信号处理程序并从其返回,pause函数才会返回。它的返回值一直为-1,并设置相应的错误码。
转载地址:https://blog.csdn.net/s2603898260/article/details/105796413 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月12日 00时09分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Boost::Flyweight 基本示例
2019-04-26
AI第二阶段 高等数学基础——概率论和数理统计篇学习总结
2019-04-26
boost::noncopyable用法的测试程序
2019-04-26
boost::foreach模块右值 const_r的测试程序
2019-04-26
SQL Server数据库基础知识
2019-04-26
boost::foreach模块非常量右值的测试程序
2019-04-26
boost::format模块format的高级用法示例
2019-04-26
boost::format模块演示添加到 printf 语法的功能
2019-04-26
具有用户定义类型的format的示例用法
2019-04-26
boost::format模块测试格式与枚举一起使用
2019-04-26
boost::format模块异常处理的测试程序
2019-04-26
boost::format模块测试 wchar_t 格式的使用
2019-04-26
boost::format模块测试构造对象和基本解析
2019-04-26
boost::function模块右值的测试程序
2019-04-26
boost::bad_function_call用法的测试程序
2019-04-26
SpringMVC框架学习总结
2019-04-26