QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 868|回复: 11

如何一个不漏地捕获多个(可能完全相同的)信号?

[复制链接]
发表于 2004-7-8 22:06:31 | 显示全部楼层 |阅读模式
紧急向各位大虾求助:

实验环境:
我在redhat linux AS3.0/AS2.1/8.0/9.0下,以及tru64 unitx5.1A环境下都尝试过,问题相同。

需求:
编写了一个服务器,它在本地启动多个完全相同的子程序,子程序执行的之间长短不确定。然后,主程序等待各个子进程的结束。等待方式是通过接受到的信号来判断哪个进程结束了,并回收该子进程占用的资源。

我的处理方法:
主进程启动子进程时,登记当前活动的子进程的数目。
主进程在启动各个子进程之间设置信号处理函数,捕获可能出现的各个信号。
在信号处理过程如下:首先阻塞所有信号(sigprocmask(SIG_BLOCK,&newmask, &oldmask)),然后挂上信号处理器(catch_sig()),最后解除阻塞(sigprocmask(SIG_UNBLOCK,&newmask, &oldmask))。在信号处理器中对捕捉到的信号进行处理,判断来源,并释放资源等。


问题:
各个子进程结束时都向主发送信号,正常情况下,信号全部相同(17)。由于各个进程可能同时发送信号,主进程在处理信号的过程中(需要一定的时间,此时到来的信号被阻塞),到来的信号却无法在处理完本信号后再次捕捉到?
主要表现就是:有些子进程已经退出了,可是却无法捕捉到。
请教各位,这该如何处理?

我希望不丢失任何一个到来的信号(即使是相同的)。
发表于 2004-7-8 22:53:21 | 显示全部楼层
唉,不知,又不能坐视不理,只好出来献丑帮你顶顶啰   
回复

使用道具 举报

发表于 2004-7-8 23:25:58 | 显示全部楼层

他这个是什么语言?c++?
回复

使用道具 举报

发表于 2004-7-8 23:29:03 | 显示全部楼层
语言无关啰,类unix系统的信号机制。

APUE只提了一下这个问题,也没说个明白。(我已经尽力了    )
回复

使用道具 举报

 楼主| 发表于 2004-7-8 23:33:40 | 显示全部楼层
标准的C语言啊
回复

使用道具 举报

发表于 2004-7-10 12:34:24 | 显示全部楼层
用实时信号应该可以搞定
回复

使用道具 举报

 楼主| 发表于 2004-7-10 21:12:08 | 显示全部楼层
怎样用实时信号解决?说详细一些好么?希望与你探讨。
我的email: [email protected]
回复

使用道具 举报

发表于 2004-7-11 12:28:44 | 显示全部楼层
已将该贴分割,便于查找、学习http://www.linuxfans.org/nuke/mo ... pic&t=75738
回复

使用道具 举报

发表于 2004-7-11 13:28:19 | 显示全部楼层
我最喜欢kill,绑在进程上的系统消息,快准狠,就是少了点。
不过对大部分操作已经足够了!
回复

使用道具 举报

发表于 2004-7-12 10:25:31 | 显示全部楼层
apue那个算是清楚了吧
回复

使用道具 举报

发表于 2004-7-14 14:25:38 | 显示全部楼层
[quote:5d7b12b738="_z_"]apue那个算是清楚了吧[/quote]    再看看   
回复

使用道具 举报

发表于 2004-7-14 17:22:53 | 显示全部楼层
Can we use the thread in the sa_hundler function
So we can't miss the signal
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 20:43 , Processed in 0.062890 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表