linux ipcrm命令,Linux命令:ipcs/ipcrm命令

ipcs/ipcrm命令  是linux/uinx上提供关于一些进程间通信方式的信息,包括共享内存,消息队列,信号

多进程间通信常用的技术手段包括共享内存、消息队列、信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,可以帮助我们查看当前系统下以上三项的使用情况,从而利于定位多进程通信中出现的通信问题。

ipcs -a命令可以查看当前使用的共享内存、消息队列及信号量所有信息,对于该选项对应的结果,介绍以下几个部分:

1、信号量在创建时分信号量集和信号量的概念,该命令的查询结果中,Semaphore Arrays下面每一行代表一个信号量集,其中perms对应信号量集的权限,nsems对应信号量集中信号量的个数,对于信号量集的创建方法可以查询semctl相关的函数使用方法。

2、对于消息队列Message Queues而言,可以看到msqid对应创建队列时得到的id值,从messages中可以看到当前队列中存在的消息个数,从used_bytes中可以看到当前所有消息占用的字节数,所以单个消息的字节数则为总字节数除以消息数,同时如果消息个数不为零则说明消息队列中的消息没有得到及时处理,可以据此判断是否存在队列阻塞的风险。

1. 命令格式

ipcs [resource-option] [output-format]

ipcs [resource-option] -i id

2. 命令功能

提供IPC设备的信息

3. 使用方法

resource选项:

ipcs -m  查看系统共享内存信息

ipcs -q  查看系统消息队列信息

ipcs -s  查看系统信号量信息

ipcs [-a] 系统默认输出信息,显示系统内所有的IPC信息

[martin@localhost data]$ ipcs -a------ Message Queues --------

key msqid owner perms used-bytes messages

------ Shared Memory Segments --------

key shmid owner perms bytes nattch status

0x00000000 229376 martin 600 4194304 2 dest

0x00000000 196609 martin 600 524288 2 dest

0x00000000 327682 martin 600 393216 2 dest

0x00000000 491525 martin 600 2097152 2 dest

------ Semaphore Arrays --------

key semid owner perms nsems

输出格式控制:

ipcs -c  查看IPC的创建者和所有者

ipcs -l  查看IPC资源的限制信息

ipcs -p  查看IPC资源的创建者和使用的进程ID

ipcs -t  查看最新调用IPC资源的详细时间

ipcs -u  查看IPC资源状态汇总信息

[martin@localhost data]$ ipcs -u --human------ Messages Status --------

allocated queues = 0

used headers = 0

used space = 0B

------ Shared Memory Status --------

segments allocated 4

pages allocated 1760

pages resident 339

pages swapped 0

Swap performance: 0 attempts 0 successes

------ Semaphore Status --------

used arrays = 0

allocated semaphores = 0

额外格式控制:

ipcs -l --human

以人类可以阅读的方式显示size

[martin@localhost data]$ ipcs -l--human------ Messages Limits --------

max queues system wide = 3644

max size of message = 8K

default max size of queue = 16K

------ Shared Memory Limits --------

max number of segments = 4096

max seg size = 16E

max total shared memory = 16E

min seg size = 1B

------ Semaphore Limits --------

max number of arrays = 128

max semaphores per array = 250

max semaphores system wide = 32000

max ops per semop call = 32

semaphore max value = 3276

ipcs -p命令可以得到与共享内存、消息队列相关进程之间的消息。对于此选项,有如下介绍:

1、从该命令结果中可以看到Message Queues PIDs中的msqid既对应上条命令结果中的消息队列id,根据id则可以获取到lspid、lrpid消息,其中lspid代表最近一次向消息队列中发送消息的“进程号”,lrpid对应最近一次从消息队列中读取消息的“进程号”。但请注意:此处的进程号是弱进程号,既它有可能代表的是线程号,如果进程中是起的线程对消息队列发送、接收消息,则此处pid对应的均是线程号。可以采用ps -AL | grep pid来查找该线程对应的进程id。

ipcrm

1. 命令功能

通过指定ID删除删除IPC资源,同时将与IPC对象关联的数据一并删除,只有超级用户或IPC资源创建者能够删除

2. 使用方法

ipcrm -M shmkey

移除用shmkey创建的共享内存段

ipcrm -m shmid

移除用shmid标识的共享内存段

ipcrm -S semkey

移除用semkey创建的信号量

ipcrm -s semid

移除用semid标识的信号量

ipcrm -Q msgkey

移除用msgkey创建的消息队列

ipcrm -q msgid

移除用msgid标识的消息队列

参考:https://blog.csdn.net/xiaokaige198747/article/details/78024390

https://blog.csdn.net/vic_qxz/article/details/80405739

修改IPC系统参数

以linux系统为例,在root用户下修改/etc/sysctl.conf 文件,保存后使用sysctl -p生效:

$cat /etc/sysctl.conf

# 一个消息的最大长度

kernel.msgmax = 524288

# 一个消息队列上的最大字节数

# 524288*10

kernel.msgmnb = 5242880

#最大消息队列的个数

kernel.msgmni=2048

#一个共享内存区的最大字节数

kernel.shmmax = 17179869184

#系统范围内最大共享内存标识数

kernel.shmmni=4096

#每个信号灯集的最大信号灯数 系统范围内最大信号灯数 每个信号灯支持的最大操作数 系统范围内最大信号灯集数

#此参数为系统默认,可以不用修改

#kernel.sem = *

kernel.sem = 250 32000 32 128

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

预备知识

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

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

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

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

ipcs 命令

ipcs -a 是默认的输出信息 打印出当前系统中所有的进程间通信方式的信息

ipcs -m 打印出使用共享内存进行进程间通信的信息

ipcs -q 打印出使用消息队列进行进程间通信的信息

ipcs -s 打印出使用信号进行进程间通信的信息

ipcrm 命令

移除一个消息对象。或者共享内存段,或者一个信号集,同时会将与ipc对象相关链的数据也一起移除。

当然,只有超级管理员,或者ipc对象的创建者才有这项权利啦。

ipcrm -M shmkey 移除用shmkey创建的共享内存段

ipcrm -m shmid 移除用shmid标识的共享内存段

ipcrm -Q msgkey 移除用msqkey创建的消息队列

ipcrm -q msqid 移除用msqid标识的消息队列

ipcrm -S semkey 移除用semkey创建的信号

ipcrm -s semid 移除用semid标识的信号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值