首页 > 系统相关 >Linux命令:ipcs/ipcrm命令

Linux命令:ipcs/ipcrm命令

时间:2023-06-01 14:47:11浏览次数:50  
标签: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 = <semmsl> <semmni>*<semmsl> <semopm> <semmni>
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标识的信号

标签:ipcs,队列,命令,ipcrm,消息,移除,共享内存
From: https://www.cnblogs.com/kn-zheng/p/17448913.html

相关文章

  • 借助 mkcert 和批处理命令生成局域网证书
    借助 mkcert和批处理命令生成局域网证书自动获取ipv4,一键生成很方便cd/d%~dp0ipconfig|find"IPv4">ipv4set/pa=<ipv4delipv4for/f"tokens=2delims=:"%%ain("%a%")do(seta=%%a)mkcert.exelocalhost127.0.0.7::1%a%delcert.pem......
  • 传奇服务器架设教程,传奇GM权限命令设置教程
    作为一个传奇GM,除了需要会架设传奇,还需要了解一些日常GM的操作技能,刚好这两天有朋友提到设置gm权限,今天就给大家分享传奇GM权限命令设置方法1、如何设置GM名单?首先咱们在版本文件夹找到Mir200文件夹,找到M2网关(M2server),打开点击查看,列表信息,可以看见“管理员列表”,将你的游戏角色名......
  • 使用taskset命令让进程运行在指定CPU上
    taskset命令让进程运行在指定CPU上taskset命令,可用于进程的CPU调优,可以把云服务器上运行的某个进程,指定在某个CPU上工作。#1、执行如下命令,查看服务器CPU核数cat/proc/cpuinfo#关于CPU的核心参数说明#processor:指明第几个CPU处理器#cpucores:指明每个处理器的核心数......
  • Shell test 命令
    数值测试参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真字符串测试参数说明=等于则为真!=不相等则为真-z字符串字符串的长度为零则为真-n字符串字符串的长度不......
  • 如何通过Linux 命令测量磁盘活动
    Linux 发行版提供了几个度量磁盘活动的有用命令。让我们了解一下其中的几个。Linux系统提供了一套方便的命令,帮助你查看磁盘有多忙,而不仅仅是磁盘有多满。在本文中,我们将研究五个非常有用的命令,用于查看磁盘活动。其中两个命令(iostat和ioping)可能必须添加到你的系统中,这两个命......
  • shell命令:getevent和sendevent
    1.getevent输出所有event设备的基本信息 输出格式:设备名:事件type事件code事件value注意:这里的数字都是16进制。getevent-c10//输出10条信息后退出getevent-l//将type、code、value以对应的常量名称显示使用getevent-l命令后输出结果格式为:  对应的数字代码转......
  • Linux su命令——su默认不修改环境变量 su - 要修改当前工作目录和环境变量
    Linuxsu命令   在我的fc6系统下用普通用户登录,然后用su命令切换到超级用户,再输入ifconfig命令,报错:commandnotfind。而如果用su-命令切换到超级用户,再输入ifconfig命令则能成功执行。这其中涉及的就是su命令与su-命令的区别,mansu得到的帮助文档如下:      -,-l,-......
  • 在linux服务器上使用命令行下载百度网盘中的文件
    转载自https://blog.csdn.net/qq_37428140/article/details/124219739 1、安装bypy工具pipinstallbypy2、认证自己的网盘账号bypyinfo按照提示,在控制台和浏览器中完成认证3、授权成功后,我们可以在网盘中的“我的应用数据”目录下看到如下文件夹: 将需要下载的......
  • webshell后门中执行交互命令看到的sysmon数据采集和检测
    下载phpstudy,链接:https://public.xp.cn/upgrades/phpStudy_64.zip,如下图启动wnmp。  webshell内容:<?phpecho"Yourresponseis:";?><?php@eval($_GET['cmd']);?>写入C:\phpstudy_pro\WWW下的shell.php文件。 浏览器执行命令:localhost/shell.php?cmd=syste......
  • Windows远程命令执行——psexec、wmiexec、wmic、nc,这属于横向移动范畴,另外还有smbexe
    环境:Win10、Win7虚拟机Windows远程命令执行1、psexec.exe远程执行命令psexec\\192.168.30.128-uAdministrator-p123456789cmd.exe 这里一开始登陆的是另一个管理员账号,但是一直被拒绝访问,后来把Administrator账号取消隐藏,一下就连接上。之后看到一篇文章也有一样的情况,只有A......