免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6839 | 回复: 9
打印 上一主题 下一主题

[C] alarm和pause函数不解。 [复制链接]

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-15 16:04 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
2 [报告]
发表于 2008-08-15 16:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2008-08-15 16:36 |只看该作者
sigalrm默认行为是终止

论坛徽章:
0
4 [报告]
发表于 2008-08-15 17:02 |只看该作者
pause 使进程挂起,5秒钟后收到SIGALRM信号,SIGALRM信号默认ACTION是TERM。所以轮不到执行printf那一行进程就退出了。
详情man 2 signal    man 7 signal

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
5 [报告]
发表于 2008-08-15 18:01 |只看该作者

回复 #1 c/unix 的帖子

需要捕获信号SIGALRM,
例如:
void sigHandler(int sig)
{
   //....
}

signal(SIGALRM, sigHandler);

论坛徽章:
0
6 [报告]
发表于 2008-08-16 00:45 |只看该作者
SIGALRM信号默认ACTION是TERM,应该根据系统设置参数

论坛徽章:
0
7 [报告]
发表于 2009-01-06 09:43 |只看该作者
程序执行到pause()后挂起,等到alarm时钟触发信号处理函数后返回时,pause返回。
alarm默认终止程序,所以不会打印了。应该signal(alarm,IGN)掉。

论坛徽章:
0
8 [报告]
发表于 2009-01-06 11:07 |只看该作者
alarm(sec)干嘛用的?

程序仍能继续运行,到sec妙后返回一个信号?

如果没有pause()会怎么样 ?

论坛徽章:
0
9 [报告]
发表于 2009-01-06 16:33 |只看该作者
alarm(sec)设置了sec秒的定时器,程序继续运行,到pause()进程挂起,知道定时器sec秒到,默认进程终止,如果把信号IGN掉,则pause()调用将立刻返回,程序继续执行下一句,直到程序终止。

论坛徽章:
0
10 [报告]
发表于 2011-04-18 17:10 |只看该作者
pause()函数的功能是使进程睡眠,只有执行了一个信号处理程序并从其返回时,pause()才返回,当你的程序并未执行信号处理程序,是否意味着你pause()并不返回,而你那个程序只是SIGALRM默认动作中断了进程。所以我觉得pause函数在那好像没发挥作用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP