- 论坛徽章:
- 0
|
原帖由 bosi_cat 于 2008-7-9 20:34 发表 ![]()
to 5楼:
多谢你了,按照你的办法成功解决这个问题,以前没用过这这两个函数,我看了前面几个函数就没往下看了,不过你的方法要修正一点点:
sigprocmask();
sigsuspend();
sleep( 10 );
sigprocmask(); ...
兄弟, 你对sigsuspend理解的可能不大对
sigsuspend是等待一个信号, 或者说, 按照你修改的代码来讲:
- sigprocmask();
- sigsuspend();
- sleep( 10 );
- sigprocmask();
复制代码
1. sigsuspend会阻塞, 如果sigsuspend执行后始终没有信号的话, sleep( 10 )是执行不到的, 这可能就是你所说的"死进程"的原因所在
2. sigprocmask只设置一次就够了, 一般应该在循环外设置
其实按照你的需求, 代码似乎应该这么写
- sigprocmask();
-
- while( 1 )
- {
- sleep( 10 );
- if( sigpending() ) // 在这里检查未决信号
- {
- sigsuspend(); // 确定有未决信号后, 才有的放矢
- }
- }
复制代码
[ 本帖最后由 isnowran 于 2008-7-10 11:58 编辑 ] |
|