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

时间:2011-07-07 12:30:01

标签: linux persistence message-queue

这可能是关于消息队列的一个全新的问题,但我们遇到一些问题,它们在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;

我们遇到的问题是,只要我们更改传递的邮件大小或应用程序崩溃/退出/中止并且队列尚未关闭和清空,程序的下一次运行就会使系统老化消息或无法正确打开,数据无法到达线程。

目前我们通过更改队列名称然后经常重新启动系统来解决问题。

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

# ipcs -q

您可以删除陈旧的队列:

# ipcrm -q MSQID

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