我在基于IPC的应用程序中使用msgget()
函数。如何清理填充旧消息队列的队列?
答案 0 :(得分:5)
答案 1 :(得分:1)
解决方法是增加 MSGMNI 系统范围的最大消息队列数:取决于策略(在Linux上,可以通过 / proc / sys / kernel / msgmni读取和修改此限制强>)。
答案 2 :(得分:1)
您可以使用 mq_setattr 更改O_NONBLOCK的邮件队列属性。 然后通过读取所有消息清空队列,直到返回的值指示队列为空。 现在设置旧属性。
此方法不是运行时优化的,但它避免了关闭和打开消息队列的需要。
答案 3 :(得分:0)
这些持久性资源分配问题(与共享内存类似)是System V API通常被认为已弃用的原因。在这种情况下,您是否考虑过使用unix域套接字或FIFO而不是消息队列?这些出现在文件系统中,并且当不再使用rm。
等工具时可以“清理”