我的工具集1——集中删除系统中的消息队列
2016-06-05 09:46
387 查看
我的工具集1——集中删除系统中的消息队列
最近看到一个说法——不做任何超过90秒的工作。这真是偷懒达到一定境界了。不过其实很有道理,程序员嘛,就是要做些东西可以让大家偷懒,解放生产力。而第一个享用着当然应该是自己了。之前也会偶尔写些脚本帮助处理重复性的工作,不过没有什么记录,今天开始,所有写过的小工具要做个记录了。需求
最近在做消息队列的开发,由于代码还在测试过程中,会在系统中产生好多消息队列。比如这样zhanghaoran@wlan-ubuntu:~/work/mytoolkit/mytoolkit$ ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages 0x00000001 163840 zhanghaora 660 0 0 0x0000604c 589825 zhanghaora 660 0 0 0x00005ec3 229378 zhanghaora 660 8 1 0x00005ee1 262147 zhanghaora 660 8 1 0x00005ee8 294916 zhanghaora 660 8 1 0x00005f1c 327685 zhanghaora 660 0 0 0x00005f47 360454 zhanghaora 660 0 0 0x00005f87 393223 zhanghaora 660 0 0 0x00005f88 425992 zhanghaora 660 0 0 0x00005fa9 458761 zhanghaora 660 0 0 0x00005fd0 491530 zhanghaora 660 0 0 0x00005fed 524299 zhanghaora 660 0 0 0x0000601b 557068 zhanghaora 660 0 0 0x00006068 622605 zhanghaora 660 0 0 0x00006084 655374 zhanghaora 660 0 0 0x000060a7 688143 zhanghaora 660 0 0 0x000060c3 720912 zhanghaora 660 0 0 0x000060c5 753681 zhanghaora 660 0 0 0x00006103 786450 zhanghaora 660 0 0 0x0000611f 819219 zhanghaora 660 0 0 0x0000613d 851988 zhanghaora 660 0 0 0x0000615a 884757 zhanghaora 660 0 0 0x0000617e 917526 zhanghaora 660 0 0 0x0000619b 950295 zhanghaora 660 0 0 0x000061bb 983064 zhanghaora 660 0 0 0x000061e2 1015833 zhanghaora 660 0 0 0x00006205 1048602 zhanghaora 660 0 0 0x00006222 1081371 zhanghaora 660 0 0 0x00006241 1114140 zhanghaora 660 0 0 0x00006274 1146909 zhanghaora 660 0 0 0x00006291 1179678 zhanghaora 660 0 0 0x000062d1 1212447 zhanghaora 660 0 0 0x00006442 1245216 zhanghaora 660 0 0 0x00000000 1277985 zhanghaora 660 3 1 0x00006478 1310754 zhanghaora 660 8 1 0x00000000 1343523 zhanghaora 660 3 1 0x00006495 1376292 zhanghaora 660 8 1 0x00000000 1409061 zhanghaora 660 3 1 0x000064b4 1441830 zhanghaora 660 8 1 0x00000000 1474599 zhanghaora 660 3 1 0x000064d4 1507368 zhanghaora 660 8 1 0x00000000 1540137 zhanghaora 660 3 1 0x000064ec 1572906 zhanghaora 660 8 1 0x00000000 1605675 zhanghaora 660 3 1 0x00006522 1638444 zhanghaora 660 0 0 0x00000000 1671213 zhanghaora 660 3 1 0x0000653d 1703982 zhanghaora 660 8 1 0x00000000 1736751 zhanghaora 660 3 1
一条一条手动删除并非上策,那么就要做个小工具集中删除了。
解决方案
当然可以使用shell脚本来解决,不过最近学习Python总是没机会使用,就拿这个练手了。先上代码:#!/usr/bin/python3 import os import re data = os.popen('ipcs -q').read() lines = re.split('\n', data); for line in lines: elements = re.split(' ', line) if len(elements) >= 2: if elements[1].isdigit(): os.system('ipcrm -q' + elements[1])
要想删除一个消息队列,使用的方法是ipcrm -q + 消息队列号,也就是要提取出ipcs -q中每行的第二个字段。这样我们需要将ipcs -q的执行结果放到一个变量中方便处理。os.system()不能获得shell的执行结果,但是可以借助os.popen()。这个函数原型为:
os.popen(cmd, mode=’r’, buffering=-1)
它打开一个连接cmd的管道。返回值是这个打开的管道的文件描述符,可以进行读或写操作。这样我们就可以将’ipcs -q’命令的结果读进data变量了。
之后要将变量按行处理,可以通过re.split(),这个函数可以将一个字符串按照指定的模式进行分割,返回作为分割结果的list。
之后遍历这个list,观察’ipcs -q’的结果,我们需要的是第二列为数字的行,所以进行 进一步过滤。最后用得到的ipc号执行’ipcrm -q’即可。
本文代码托管于:
https://github.com/haoranzeus/mytoolkit
相关文章推荐
- Shell 脚本编程陷阱
- VBS脚本写的Windows硬件检测工具分享
- 用vbscript实现隐藏任务栏图标的脚本
- 用autoit编写第一个脚本(Hello World)
- VBS调用WMI快速关闭IE的脚本
- Oracle数据库执行脚本常用命令小结
- 收集的ROS防火墙脚本
- JSP脚本漏洞面面观
- 不错的批处理脚本 第一部分
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- 不错的批处理脚本实例代码 第二部分
- 使用脚本和批处理清除电脑中的痕迹的代码第1/2页
- 让你的脚本说话
- Lua脚本获取喜马拉雅MP3音频地址
- SQL Server中数据行批量插入脚本的存储实现
- 编程界主流脚本编程语言的比较和选择
- 批量文件查找替换功能的vbs脚本
- Powershell脚本的4种执行权限介绍
- Windows Powershell 执行文件和脚本