【发布时间】:2019-12-06 19:02:26
【问题描述】:
我有一个硬性要求,即强制销毁具有给定名称的 posix 消息队列。
我通过反复试验发现这个命令不会做
mq_unlink(BROKER_NAME);
上面的问题是即使取消链接后,只要其他线程/进程引用它,队列就存在。
有没有办法强行销毁队列,不问问题?
我还将有文件描述符到队列。
【问题讨论】:
标签: posix message-queue
我有一个硬性要求,即强制销毁具有给定名称的 posix 消息队列。
我通过反复试验发现这个命令不会做
mq_unlink(BROKER_NAME);
上面的问题是即使取消链接后,只要其他线程/进程引用它,队列就存在。
有没有办法强行销毁队列,不问问题?
我还将有文件描述符到队列。
【问题讨论】:
标签: posix message-queue
只要队列还在使用中,就不能强制销毁队列
每POSIX mq_unlink()(我的粗体字):
如果一个或多个进程在调用
mq_unlink()时打开了消息队列,应推迟销毁消息队列,直到所有对消息队列的引用都已关闭。
您必须让所有使用队列的进程也关闭它们的连接。
【讨论】:
mq_close() 应该足够了(POSIX 说“关闭”)。但是您可能应该测试一些事情以确保 - 并注意在您调用 mq_unlink() 后进程尝试重新创建队列的竞争条件。