簡體   English   中英

如何清除IPC消息隊列?

[英]How can I cleanup the IPC message-queue?

我在基於IPC的應用程序中使用msgget()函數。 如何清理由舊消息隊列填充的隊列?

要刪除隊列,請使用以下命令:

msgctl(msgQID, IPC_RMID, NULL);

系統調用:msgctl()

解決方法是增加MSGMNI系統范圍內最大的消息隊列數量:與策略有關(在Linux上,可以通過/ proc / sys / kernel / msgmni讀取和修改此限制)。

您可以使用mq_setattr更改O_NONBLOCK的消息隊列屬性。 然后通過讀取所有消息清空隊列,直到返回的值表明隊列為空。 現在重新設置舊屬性。

該方法未對運行時進行優化,但是避免了關閉和打開消息隊列的需要。

這些持久性資源分配問題(共享內存存在類似的問題)是為什么System V API通常被視為不贊成使用的原因。 在這種情況下,您是否考慮過使用unix域套接字或FIFO而不是消息隊列? 那些出現在文件系統中,並且在不再與rm之類的工具一起使用時可以被“清理”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM