免费注册 查看新帖 |

Chinaunix

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

sleep函数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-01 20:50 |只看该作者 |倒序浏览
本帖最后由 kris_fei 于 2010-07-01 20:53 编辑

sleep函数中有说 ,如果被打断返回剩余时间,请问我要发什么信号恢复睡眠,继续执行下面的程序。

如:

  1. #include <unistd.h>
  2. #include <stdio.h>int main()
  3. {
  4.         int val = sleep(10);
  5.         printf("val:%d\n",val);

  6.         return 0;
  7. }
复制代码
请问我发送个什么信号给进程才能执行 printf("val:%d\n",val) 而不是退出程序。

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
2 [报告]
发表于 2010-07-02 07:59 |只看该作者
循环检测控制?
LZ可以参考APUE2 10.19. sleep Function

论坛徽章:
0
3 [报告]
发表于 2010-07-02 17:50 |只看该作者
本帖最后由 kgn28 于 2010-07-02 18:03 编辑

回复 1# kris_fei


    sleep随便发一个信号都会导致睡眠的终止吧,如果你想程序不退出,就修改默认的信号处理函数(大部分都是终止),或者选择默认忽略的信号(查了一下,好像SIGWINCH是忽略),或者你随便改一个就可以了吧:
void sig_action(){}
signal(SIGINT, sig_action)
然后发SIGINT
不知道我想的有何纰漏?
sleep 10000
然后kill -SIGWINCH 2895没反应
kill -SIGINT 2895,sleep退出。
这个程序你发sigint,就不会退出了。
  1. #include <unistd.h>
  2. #include <signal.h>
  3. #include <stdio.h>

  4. static void sig_action(){}

  5. int main()
  6. {
  7.         int val;

  8.         signal(SIGINT, sig_action);
  9.         for(;;){
  10.                 val = sleep(100000);
  11.                 printf("val:%d\n",val);
  12.         }   

  13.         return 0;
  14. }
复制代码
只不过signal这个函数的实现依赖系统,在POSIX中是不可靠的,可以考虑使用sigaction函数代替。

论坛徽章:
0
4 [报告]
发表于 2010-07-03 18:55 |只看该作者
公司都禁用signal这个函数

论坛徽章:
0
5 [报告]
发表于 2010-07-03 20:55 |只看该作者
回复 4# linux初学三月


    为啥?

论坛徽章:
0
6 [报告]
发表于 2010-07-05 18:44 |只看该作者
用sigaction()。 signal这个函数会被打断

论坛徽章:
0
7 [报告]
发表于 2010-07-06 00:35 |只看该作者
回复 6# linux初学三月


    打断?什么意思?不是说是信号会丢失?不可靠吗?

论坛徽章:
0
8 [报告]
发表于 2010-07-06 22:53 |只看该作者
回复 6# linux初学三月


       signal()函数不是由sigaction()实现的吗?

论坛徽章:
0
9 [报告]
发表于 2010-07-07 07:24 |只看该作者
什么,老大,别胡说。

signal()函数怎么是由sigaction()实现的

论坛徽章:
0
10 [报告]
发表于 2010-07-07 07:25 |只看该作者
sigaction()是为了在一定程度上修正signal()函数的缺陷而出现的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP