免费注册 查看新帖 |

Chinaunix

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

[C] 信号处理函数有时间限制吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-06 13:08 |只看该作者 |倒序浏览
signal(SIGUSR1, signal_handle_wifi);
signal(SIGUSR2, signal_handle_wifi);

如下所示,当捕获到这两个信号时,用函数signal_handle_wifi进行相关处理;

当signal_handle_wifi 函数里有system("xxx")时,此函数只执行一半就return了.

但去掉system,设置一些FLAG,转到其他函数再调用相关system时,整个程序是可以正常运行的,system是可以处理.

这是为什么?是不是信号处理函数里有时间限制,system执行需要太多时间?或者是有其他什么原因??

论坛徽章:
0
2 [报告]
发表于 2010-01-06 15:58 |只看该作者
你的main函数是不是退出了?要捕捉信号的  你在main函数最后加个死循环吧

论坛徽章:
0
3 [报告]
发表于 2010-01-06 17:11 |只看该作者
如果你是使用windows, 那么最好别使用signal函数(因为实现的很龌龊)。信号处理函数不存在时间限制的说法。多数情况下是你的程序有问题。

论坛徽章:
0
4 [报告]
发表于 2010-01-06 17:21 |只看该作者
POSIX对signal的处理函数能包含的函数有明确的限制,像system() 这样的函数是认为非安全的,执行结果是不可预期的。
我对这个的理解是:
信号不允许嵌套,在一个信号处理函数调用system(),会等待SIGCHLD,当这个信号到来后,会破坏原先信号的上下文,就不能回到原来的处理了。

你可以man signal, NOTES那部分有说明

论坛徽章:
0
5 [报告]
发表于 2010-01-06 19:07 |只看该作者
而且有一点,加一个system();比如说system("ls");这种之类的是可以运行的,多加了一些特别是运行时间需要比较长的system的时候,就会出现这种现象.

我是linux环境

论坛徽章:
0
6 [报告]
发表于 2010-01-07 12:11 |只看该作者
原帖由 sbc19861004 于 2010-1-6 17:21 发表
POSIX对signal的处理函数能包含的函数有明确的限制,像system() 这样的函数是认为非安全的,执行结果是不可预期的。
我对这个的理解是:
信号不允许嵌套,在一个信号处理函数调用system(),会等待SIGCHLD,当这 ...

只说对了一半。是同一种信号不能嵌套,不同信号是可以的。这个问题之前有人问过了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP