在Linux中使消息队列非持久化



这可能是一个关于消息队列的新手问题,但是我们在整个Linux系统中遇到了一些问题。我们正在运行Fedora 14,并使用消息队列在线程之间传递数据。

问题是我们创建了一个消息队列:

q = mq_open (strName, O_RDWR | O_CREAT | O_NONBLOCK, 0666, &sQAttr)

地点:

strName = "/INFO_UPD_Q" or "/POLL_Q" ...
sQAttr.mq_flags   = 0;
sQAttr.mq_maxmsg  = iMaxNumMessages; /* 1 - 10 */
sQAttr.mq_msgsize = iSzOfMessages;
sQAttr.mq_curmsgs = 0;

我们遇到的问题是,一旦我们改变了传递的消息的大小,或者应用程序崩溃/退出/中止,队列还没有关闭和清空,下一次运行的程序就会用旧消息淹没系统,或者不能正确打开,数据不能到达线程。

目前我们正在通过更改队列的名称,然后每隔一段时间重新启动系统来解决这个问题。

我们如何让队列停止这样做?

谢谢。

在shell中,您可以使用以下命令查看所有现有的队列:

# ipcs -q

你可以删除陈旧的队列:

# ipcrm -q MSQID

MSQID可以从第一个命令的输出中获得。

最新更新