[英]How can I cleanup the IPC message-queue?
我在基於IPC的應用程序中使用msgget()
函數。 如何清理由舊消息隊列填充的隊列?
解決方法是增加MSGMNI系統范圍內最大的消息隊列數量:與策略有關(在Linux上,可以通過/ proc / sys / kernel / msgmni讀取和修改此限制)。
您可以使用mq_setattr更改O_NONBLOCK的消息隊列屬性。 然后通過讀取所有消息清空隊列,直到返回的值表明隊列為空。 現在重新設置舊屬性。
該方法未對運行時進行優化,但是避免了關閉和打開消息隊列的需要。
這些持久性資源分配問題(共享內存存在類似的問題)是為什么System V API通常被視為不贊成使用的原因。 在這種情況下,您是否考慮過使用unix域套接字或FIFO而不是消息隊列? 那些出現在文件系統中,並且在不再與rm之類的工具一起使用時可以被“清理”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.