这可能是关于消息队列的一个全新的问题,但我们遇到一些问题,它们在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;
我们遇到的问题是,只要我们更改传递的邮件大小或应用程序崩溃/退出/中止并且队列尚未关闭和清空,程序的下一次运行就会使系统老化消息或无法正确打开,数据无法到达线程。
目前我们通过更改队列名称然后经常重新启动系统来解决问题。
我们如何让队列停止这样做?
感谢。
答案 0 :(得分:1)
在shell中,您可以使用以下命令查看所有现有队列:
# ipcs -q
您可以删除陈旧的队列:
# ipcrm -q MSQID
MSQID可从第一个命令的输出中获得。