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

在Linux中使消息队列非持久化,linux,persistence,message-queue,Linux,Persistence,Message Queue,关于消息队列,这可能是一个完全陌生的问题,但在整个Linux系统中,它们的持久性存在一些问题。我们正在运行Fedora14,并使用消息队列在线程之间传递数据 问题是我们创建了一个消息队列: 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_maxm

关于消息队列,这可能是一个完全陌生的问题,但在整个Linux系统中,它们的持久性存在一些问题。我们正在运行Fedora14,并使用消息队列在线程之间传递数据

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

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可以从第一个命令的输出中获得。

huh,我起初以为这是关于Qt的。请不要使用非常用缩写。(编辑:标题是关于“messageQs”)嗯,我不确定我在跟踪吗?您指的是什么非常用缩写?谢谢,“messageQ”是一个不常见的缩写。这会引起混乱。如果可能的话,请避免使用不常见的缩写和类似的说法。我把它改成了“消息队列”。好的,太好了。谢谢,以后可以。