删除消息队列问题?

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

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

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

楼上说的对!
---------------------------------------------------------------

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信号是很保险的。
---------------------------------------------------------------

死循环前;
不要忘了#include

 1<signal.h>   
 2\---------------------------------------------------------------   
 3  
 4signal(SIGINT,remove_queue);   
 5  
 6放在程序的死循环前就行了。表示收到SIGINT信号后执行remove_queue函数。   
 7\---------------------------------------------------------------   
 8  
 9signal(SIGINT,remove_queue);   
10放在循环之前任何地方都可以</signal.h>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus