当前位置:  技术问答>linux和unix

删除消息队列问题?

    来源: 互联网  发布时间:2015-01-21

    本文导语:  最近写一个用消息队列实现进程间通信的程序,服务端程序是一个死循环,不断读消息队列看是否不请求发出.问题是我每次强行退出此进程后,这个消息队列不是还留在系统中吗?有那位大侠怎么样将这个消息队列给删除...

最近写一个用消息队列实现进程间通信的程序,服务端程序是一个死循环,不断读消息队列看是否不请求发出.问题是我每次强行退出此进程后,这个消息队列不是还留在系统中吗?有那位大侠怎么样将这个消息队列给删除掉(在程序退出的时候),先谢了

|
signal(SIGINT,remove_queue);

void remove_queue(int qid)
{
/* Remove the queue */
msgctl(qid, IPC_RMID, 0);
}


不好意思,借花献佛:)

|
"
signal(SIGINT,remove_queue);

void remove_queue(int qid)
{
/* Remove the queue */
msgctl(qid, IPC_RMID, 0);
}
"
上文错误,上文中qid == SIGINT。
而msgctl(qid, IPC_RMID, 0);中的qid应该是你要删除的消息队列的ID。
而且我觉得要捕捉的信号不仅仅是SIGINT,还应该有别的信号,得看你将以什么方式退出了,但是捕捉SIGTERM信号是很保险的。

|
void remove_queue(int qid)
{
/* Remove the queue */
msgctl(qid, IPC_RMID, 0);
}
函数msctl,在退出来时,讲消息队列清除。

|
死循环前;
不要忘了#include 

|
楼上说的对!

|
你是怎么强行退出的?
如果你是ctrl+C或者delete强行退出的,你可以在SIGINT信号的句柄函数中删除该消息队列然后退出。

|
signal(SIGINT,remove_queue);

放在程序的死循环前就行了。表示收到SIGINT信号后执行remove_queue函数。

|
signal(SIGINT,remove_queue);
放在循环之前任何地方都可以

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Maps 成员 erase():删除一个元素
  • 怎么实现,动态的增加和删除input,删除时用radiobox选中,然后点删除,即可。谢谢
  • C++ MultiMaps 成员 erase():删除元素
  • 100分相送,怎么实现,动态的增加和删除input,删除时用radiobox选中,然后点删除,即可
  • C++ Lists(链表) 成员 erase():删除一个元素
  • 请问:linux中的软件包安装后,怎么删除呀,直接删除吗?
  • C++ Lists(链表) 成员 remove():从list删除元素
  • jquery删除提示框(弹出是否删除对话框)
  • C++ Lists(链表) 成员 unique():删除list中重复的元素
  • vim删除命令"d3e"为什么删除单词的数目不一致?
  • C++ Lists(链表) 成员 pop_front():删除第一个元素
  • 如何删除前面有个-的文件,我的根目录下有个文件叫 -C,请问如何删除?
  • C++ MultiMaps 成员 clear():删除所有元素
  • jquery删除提示框弹出是否删除对话框
  • C++ Lists(链表) 成员 clear():删除所有元素
  • GRUB的删除与逻辑驱动器存在时扩展分区的删除
  • C++ Lists(链表) 成员 remove_if():按指定条件删除元素
  • fedora 删除软件,但是不删除依赖软件
  • C++ Maps 成员 clear():删除所有元素
  • linux 变量内容删除 中有关“最短数据删除”的意思
  • C++ Lists(链表) 成员 pop_back():删除最后一个元素
  • sql server 删除表1某些数据的同时自动删除表2的相关数据的sql代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3