ipcs - show information on IPC facilities. IPC - 进程间通信(Inter-Process Communication)。 # 一、ipcs ipcs是linux/uinx上提供关于一些进程间通信方式信息的命令,包括共享内存,消息队列,信号。 ## ipcs参数说明 - -a 是默认的输出信息,打印出当前系统中所有的进程间通信方式的信息。 - -u 输出当前系统下ipc各种方式的状态信息(共享内存,消息队列,信号),例如: ```bash [ff@test ff]$ ipcs -u ------ Messages Status -------- allocated queues = 0 used headers = 0 used space = 0 bytes ------ Shared Memory Status -------- segments allocated 52 pages allocated 23105 pages resident 22354 pages swapped 0 Swap performance: 0 attempts 0 successes ------ Semaphore Status -------- used arrays = 148 allocated semaphores = 2500 ``` - -m 打印出使用共享内存进行进程间通信的信息 - -q 打印出使用消息队列进行进程间通信的信息 - -s 打印出使用信号进行进程间通信的信息 - -t 输出信息的详细变化时间 - -p 输出ipc方式的进程ID - -c 输出ipc方式的创建者/拥有者 - -l 输出ipc各种方式的在该系统下的限制条件信息,例如: ```bash [ff@test ff]$ ipcs -l ------ Messages Limits -------- max queues system wide = 2048 max size of message (bytes) = 65536 default max size of queue (bytes) = 65536 ------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 131926556 max total shared memory (kbytes) = 131926556 min seg size (bytes) = 1 ------ Semaphore Limits -------- max number of arrays = 4096 max semaphores per array = 500 max semaphores system wide = 2048000 max ops per semop call = 200 semaphore max value = 32767 ``` # 二、ipcrm 移除一个消息对象。或者共享内存段,或者一个信号集,同时会将与ipc对象相关链的数据也一起移除。当然,只有超级管理员,或者ipc对象的创建者才有这项权利。 ## ipcrm参数说明 - -M shmkey 移除用shmkey创建的共享内存段 - -m shmid 移除用shmid标识的共享内存段 - -Q msgkey 移除用msqkey创建的消息队列 - -q msqid 移除用msqid标识的消息队列 - -S semkey 移除用semkey创建的信号 - -s semid 移除用semid标识的信号 # 三、ipcs -m 查询所有共享内存 ``` ipcs -m ``` 释放所有共享内存 ``` ipcs -m | awk '$2 ~ /[0-9]+/ {print $2}' | while read s; do sudo ipcrm -m $s; done ``` 释放指定用户的所有共享内存 ``` ipcs -m | grep user_name | awk '$2 ~ /[0-9]+/ {print $2}' | while read s; do sudo ipcrm -m $s; done ``` # 四、参考 - [ipcs(1) — Linux manual page](https://www.man7.org/linux/man-pages/man1/ipcs.1.html) - [Linux ipcs命令与ipcrm命令的用法详解](https://www.jb51.net/article/40805.htm) - [Linux共享内存的管理](https://zhuanlan.zhihu.com/p/99736358)