社区
Linux/Unix社区
帖子详情
如何 删除所有的消息队列 (高分)
qq277541717
2010-09-08 04:17:06
加精
申请临时的消息队列后,如果程序不是正常退出,消息队列则会留在内核中,并一直累加.
当消息队列数大于配置支持的最大数时,则会出错.我如何才能清除掉那些无效了的消息队列(非手动)?
如:int Key = msgget(IPC_PRIVATE, IPC_CREAT|00666);
msgctl(__Key, IPC_RMID, NULL);
...全文
8171
88
打赏
收藏
如何 删除所有的消息队列 (高分)
申请临时的消息队列后,如果程序不是正常退出,消息队列则会留在内核中,并一直累加. 当消息队列数大于配置支持的最大数时,则会出错.我如何才能清除掉那些无效了的消息队列(非手动)? 如:int Key = msgget(IPC_PRIVATE, IPC_CREAT|00666); msgctl(__Key, IPC_RMID, NULL);
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
88 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
__壹零贰肆__
2012-08-31
打赏
举报
回复
受教了,多谢各位啊
gdwangwei
2011-09-09
打赏
举报
回复
我的方法是:
signal(SIGINT,remove_queue); //用户捕获系统退出等信号量,并删除队列
void remove_queue(int qid)
{
qid = 你创建队列时的id;
/* Remove the queue */
msgctl(qid, IPC_RMID, 0);
exit(1);
}
就ok了!试试吧
shry999
2011-08-16
打赏
举报
回复
学习了!
钱国正
2011-04-30
打赏
举报
回复
ipcrm -Q keyid
JosephMu
2010-09-26
打赏
举报
回复
[Quote=引用 34 楼 cochlea2007 的回复:]
我的建议, 不使用, unix域套接字, 帮你解决各种IPC难题
[/Quote]
同感~~
我觉得最笨的方法:
其实可以程序利用ipcs把得到的消息号写到标准流里面,
然后把消息号取出来。再删除不就行了么?
另一个更笨的方法:
在你创建消息队列的时候,把消息号写到一个文件中,然后退出前处理一下这个文件就好了。
如果是core dump就谁也没办法了。
关键是你退出的有多恶劣。
editionman
2010-09-23
打赏
举报
回复
看看。。。
qq277541717
2010-09-22
打赏
举报
回复
十分感谢lantianye的相告。
hairetz 进程退出绝对回收不太懂。因为进展在段错误异常退出时,无法跟踪到临时创建的信息。
猫已经找不回了
2010-09-21
打赏
举报
回复
我一般是用ftok来做。
然后保证ipc的文件跟创建的ipc资源是同步存在的,如果进程退出绝对回收sem,msg等资源,那也会同步unlink掉对应ipc文件。
如果非要用脚本来善后,也很方便,因为只要不是实际新建了一个ipc资源,每次调用msgget之类的系统调用,同一个key_t必然得到相同的ipc key。所以ipcrm之即可。
gaogao110
2010-09-21
打赏
举报
回复
学习。。。。。。。。
yhd1074694651
2010-09-20
打赏
举报
回复
不懂
··················
monkey7604
2010-09-20
打赏
举报
回复
在程序中调用ipcs也可以呀
yhlzln
2010-09-20
打赏
举报
回复
学习了,感谢楼主
ce_qbliu
2010-09-20
打赏
举报
回复
好复杂哦
lantianye
2010-09-20
打赏
举报
回复
[Quote=引用 58 楼 qq277541717 的回复:]
在退出程序时处理异常,把申请的临时队列删掉。这个工作量不小,且我现在还不太懂。
看来还是写一个脚本搞定。
[/Quote]
正常开发程序必须要做信号处理的,这属于默认的规范了,我这有一个信号的处理函数,是linux系统下的
void set_sig()
{
struct sigaction act;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
act.sa_handler = sig_child_exit_handler;
sigaction(SIGCHLD, &act, NULL);
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
act.sa_handler = sig_exit_handler;
sigaction(SIGTERM, &act, NULL);
sigaction(SIGQUIT, &act, NULL);
sigaction(SIGILL, &act, NULL);
sigaction(SIGABRT, &act, NULL);
sigaction(SIGFPE, &act, NULL);
sigaction(SIGBUS, &act, NULL);
sigaction(SIGSEGV, &act, NULL);
}
其中sig_child_exit_handler和sig_exit_handler是你自定义的处理逻辑
wwwyzt
2010-09-20
打赏
举报
回复
学习了。。这个问题好!
shuangwen163
2010-09-19
打赏
举报
回复
正在学习
gu0120
2010-09-19
打赏
举报
回复
ddd
专注挖煤二十年
2010-09-19
打赏
举报
回复
学习。。。。。。。。。。
macklau
2010-09-19
打赏
举报
回复
学习了
tata050
2010-09-19
打赏
举报
回复
灌水————
加载更多回复(68)
数据结构
高分
笔记
高分
笔记系列书籍简介
高分
笔记系列书籍包括《数据结构
高分
笔记》《组成原理
高分
笔记》《操作系统
高分
笔记》《计算机网络
高分
笔记》等,是一套针对计算机考研的辅导书。它们2010 年夏天诞生于一群考生之手,其写作...
AlgoYJ-Study:这是一个记录您亲自学习的算法的空间。
程序员
高分
工具包 数据结构 标题 内容 解释 约瑟夫斯问题 银5 堆 银4 括号 银4 第2季 银4 卡2 银4 甲板 银4 堆叠顺序 银3 后缀符号2 银3 铁棒 银3 打印机队列 银3 弹出气球 银3 括号的值 ...
消息队列
MQ学习前言
一、为啥用
消息队列
噗此,这也叫问题?别人用了我能不用么?别人用了我就用了呗,我就是为了用而用。 面试官你好,我们公司本身的业务体量很小,所以直接单机一把梭啥都能搞定了,但是后面业务体量不断扩大,采用...
消息队列
:RabbitMQ
1 相关概念 1.1什么是MQ(message queue) 本质是个队列,FIFO先入先出,存放的内容是message,而且还是一种跨进程的通信机制,用于传递上下游消息,在互联网架构中MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的...
2022 数据结构与算法《王道》学习笔记 (八)队列
队列简称队,是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行
删除
。向队列中插入元素称为入队或进队;
删除
元素称为出队或离队。 队列是一种先进先出特性的线性表。 队头。允许
删除
的一端,...
Linux/Unix社区
23,120
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章