7. ipcs 查询进程间通信状态
优质
小牛编辑
134浏览
2023-12-01
ipcs是Linux下显示进程间通信设施状态的工具。可以显示消息队列、共享内存和信号量的信息。对于程序员非常有用,普通的系统管理员一般用不到此指令。
7.1. IPC资源查询
查看系统使用的IPC资源
- ipcs
分别查询IPC资源:
- ipcs -m 查看系统使用的IPC共享内存资源
查看IPC资源被谁占用
示例:有个IPCKEY(51036),需要查询其是否被占用;
- - 首先通过计算器将其转为十六进制: 51036 -> c75c - 如果知道是被共享内存占用: - ipcs -m | grep c75c 0x0000c75c 40403197 tdea3 666 536870912 2 - 如果不确定,则直接查找: - ipcs | grep c75c 0x0000c75c 40403197 tdea3 666 536870912 2 0x0000c75c 5079070 tdea3 666 4
7.2. 系统IPC参数查询
ipcs -l
以上输出显示,目前这个系统的允许的最大内存为1073741824kb;最大可使用128个信号量,每个消息的最大长度为524288bytes;
7.3. 修改IPC系统参数
以linux系统为例,在root用户下修改/etc/sysctl.conf 文件,保存后使用sysctl -p生效:
- cat /etc/sysctl.conf
显示输入不带标志的 ipcs:的输出:
- ipcs
7.4. 清除IPC资源
使用ipcrm 命令来清除IPC资源:这个命令同时会将与ipc对象相关联的数据也一起移除。当然,只有root用户,或者ipc对象的创建者才有这项权利;
ipcrm用法:
ipcrm -M shmkey 移除用shmkey创建的共享内存段
清除当前用户创建的所有的IPC资源:
ipcs -q | awk '{ print "ipcrm -q "- 2}' | sh > /dev/null 2>&1;
7.5. 综合应用
查询user1用户环境上是否存在积Queue现象
- - 查询队列Queue: - ipcs -q ——— Message Queues ———— key msqid owner perms used-bytes messages 0x49060005 58261504 user1 660 0 0 0x4f060005 58294273 user1 660 0 0 … - 找出第6列大于0的服务: - ipcs -q |grep user1 |awk '{if(- 5>0) print - 0}' 0x00000000 1071579324 user1 644 1954530 4826 0x00000000 1071644862 user1 644 1961820 4844 0x00000000 1071677631 user1 644 1944810 4802 0x00000000 1071710400 user1 644 1961820 4844