我必须创建单个服务器进程A和多个客户端进程(Es)。所有用户都应该使用Linux消息队列进行数据传递。信息将向两个方向流动。同时,多个客户端进程(Es)也可能已注册到服务器进程A。
目前,我只使用一个命名消息队列,它由Server Process A创建和打开,并由客户端进程(Es)使用/打开(仅)。这适用于两个流程场景(即一个服务器进程A和一个客户机进程B),但不适用于多个客户端进程(Es)和一个服务器进程。
我在这里面临的问题是设计/逻辑。如何从其他客户端进程(Es)解除服务器进程A上的多路复用消息,以及从服务器进程A返回到相应的客户端进程,或者可能它可以发送回所有客户端进程(Es),但必
gcc 4.72 c89
我正在使用这本书作为参考来做mq_* posix消息队列。
The Linux Programming Interface by Michael Kerrisk page 1071
然而,在这个示例代码片段中,我注意到他们打开一个消息队列,从队列中获取一些属性。然而,他们未能关闭它。
这难道不是一种坏做法吗?因为如果不返回给操作系统,所有消息队列描述符都可能被用完,因此可能会发生资源泄漏。我猜当进程结束时,if会自动将所有资源返回给操作系统。但是,如果一个进程在一台服务器上全天候运行,那么这可能会产生重大影响。
非常感谢您的建议,
int main(int argc,
我当时正在研究linux,偶然发现了这个ipcs命令。
从手册页:
ipcs - provide information on ipc facilities
ipc在手册页中没有解释,但它很可能代表进程间的通信。这从它所列出的信息的上下文中也是有意义的:共享内存段、消息队列和信号量数组。
我想知道,由于linux/unix中的所有内容都是一个“文件”,或者至少是一个类似文件的对象,那么ipcs中列出的元素中的“文件”在哪里呢?
为什么mkfifo创建的命名管道没有在ipcs中列出?据我所知,fifos是队列。mkfifo创建的命名管道与ipcmk创建的消息队列有何不同?
我正在为嵌入式linux设备实现电源管理支持。要求是在系统中没有剩余的东西可以运行,并且下一个计时器事件足够远的时候,执行系统挂起到内存。我打算基于现有的内核enter_state()函数
最初,我计划从cpu_idle()函数(空闲内核线程)调用我的代码,因为它是在系统中没有什么可运行的时候运行的。但是我遇到了一个问题,enter_state()最终调用了schedule()函数,然后我得到一条错误消息:"bad: scheduling from the idle线程!“
因此,我得出结论,我必须创建自己的内核线程,但具有最低的静态优先级。我的问题是如何做到这一点?
另一个问题是:在
我想了解您的想法,我如何通过能够在多个服务器上运行我的服务进程来实现水平扩展。它是一个用C#编写的Windows服务,它的实际用途是订阅我们公司的Exchange Web service (EWS),这样每当有新的电子邮件传入时,它就会得到通知(通过HTTP回调)。然后,该服务获取电子邮件消息,对其进行处理,如果可能,发送回复,然后返回睡眠状态并等待下一封传入的电子邮件。
如果我在多台机器上运行它,我可以让所有机器都订阅EWS通知,也可以只让其中一台机器订阅。如果我让所有人都订阅,我会有点犹豫,因为这可能会给我们的MS Exchange基础结构增加负担。此外,这将导致所有机器接收和处理电子邮件