Linux 进程间通信(共享内存或消息队列等查看、删除)- IPCS/IPCRM命令详解

在使用共享内存的程序异常退出时,由于没有释放掉共享内存,在调试时会出现错误。您可以使用shell命令来查看与释放已经分配的共享内存,下面将详细说明如何进行查看和释放分配的共享内存的方法。

预备知识

Linux中通过API函数shmget创建的共享内存一般都是在程序中使用shmctl来释放的,但是有时为了调试程序,开发人员可能通过Ctrl + C或kill等方式发送中断信号来结束程序,此时程序申请的共享内存就不能得到释放,当然如果程序没有改动的话,重新运行程序时仍然会使用上次申请的共享内存,但是如果我们修改了程序,由于共享内存的大小不一致等原因会导致程序申请共享内存错误。因此,我们总是希望每次结束时就能释放掉申请的共享内存。

有两种方法可以用来释放共享内存:

第一种:如果总是通过Crtl+C来结束的话,可以做一个信号处理器,当接收到这个信号的时候,先释放共享内存,然后退出程序。

       第二种:不管你以什么方式结束程序,如果共享内存还是得不到释放,那么可以通过linux命令ipcrm shm shmid来释放,在使用该命令之前可以通过ipcs -m命令来查看共享内存。

SystemV的IPC通信

System V IPC共有三种类型: 
* System V消息队列

  • System V 信号量

  • System V 共享内存区。

ipcs命令

用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。

SystemV控制选项

选项描述
-a显示全部可显示的信息
-q显示活动的消息队列信息
-m显示活动的共享内存信息
-s显示活动的信号量信息

输出选项

| 选项| 描述 | 
| -t | time | 
| -p | pid | 
| -c | creator| 
| -l | limits| 
| -u| summary|

ipcs -t 输出信息的详细变化时间

这里写图片描述

ipcs -p 输出ipc方式的进程ID

这里写图片描述

ipcs -c 输出ipc方式的创建者/拥有者


这里写图片描述

ipcs -l 输出ipc各种方式的在该系统下的限制条件信息


这里写图片描述

ipcs -u 输出当前系统下ipc各种方式的状态信息(共享内存,消息队列,信号)


这里写图片描述

ipcrm 命令


移除一个消息对象。或者共享内存段,或者一个信号集,同时会将与ipc对象相关链的数据也一起移除。当然,只有超级管理员,或者ipc对象的创建者才有这项权利啦

ipcrm用法

ipcrm -M shmkey    移除用shmkey创建的共享内存段
ipcrm -m shmid    移除用shmid标识的共享内存段
ipcrm -Q msgkey    移除用msqkey创建的消息队列
ipcrm -q msqid    移除用msqid标识的消息队列
ipcrm -S semkey    移除用semkey创建的信号
ipcrm -s semid    移除用semid标识的信号
--------------------- 
作者:JeanCheng 
来源:CSDN 
原文:https://blog.csdn.net/gatieme/article/details/51026554 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值