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
来源:****
原文:https://blog.****.net/gatieme/article/details/51026554
版权声明:本文为博主原创文章,转载请附上博文链接!