ipcs 是一个在 Unix/Linux 系统中用于查看 进程间通信 设施状态信息的命令行工具。
一、什么是进程间通信
进程间通信是允许不同进程(运行中的程序)交换数据和同步操作的机制。ipcs 主要报告以下三种 IPC 资源的详细信息:
- 共享内存 - 多个进程可以访问的同一块内存区域
- 信号量 - 用于进程间的同步和互斥
- 消息队列 - 进程间通过消息传递数据
二、基本命令格式
bash
ipcs [options]
三、常用选项参数
| 选项 | 说明 |
|---|---|
-m |
查看共享内存信息 |
-q |
查看消息队列信息 |
-s |
查看信号量信息 |
-a |
查看所有 IPC 信息(默认) |
-t |
显示时间信息 |
-p |
显示进程 ID 信息 |
-c |
显示创建者/所有者信息 |
-l |
显示系统 IPC 资源限制 |
-u |
显示使用情况摘要 |
-i <id> |
显示指定 ID 的详细信息 |
四、命令输出详解
1. 查看所有 IPC 资源
bash
ipcs -a
# 或直接
ipcs
2. 共享内存信息示例
bash
ipcs -m
输出字段说明:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 32769 user 600 524288 2 dest
0x00000000 32770 user 600 4194304 1 dest
- key: IPC 键值,0x00000000 表示私有
- shmid: 共享内存段 ID
- owner: 所有者用户名
- perms: 权限(八进制,类似文件权限)
- bytes: 共享内存大小(字节)
- nattch: 当前附加的进程数
- status: 状态(dest 表示标记为删除)
3. 消息队列信息
bash
ipcs -q
------ Message Queues --------
key msqid owner perms used-bytes messages
0x00000456 0 root 644 0 0
4. 信号量信息
bash
ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000111 0 user 600 1
五、实用示例
1. 查看详细信息(包含创建进程和最后操作进程)
bash
ipcs -m -p -c
-p显示创建进程和最后操作的进程 ID-c显示创建者和所有者
2. 查看特定用户的 IPC 资源
bash
ipcs -m -u -c | grep username
3. 查看系统 IPC 限制
bash
ipcs -l
输出系统对 IPC 资源的限制,如:
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398509481980
min seg size (bytes) = 1
------ Messages Limits --------
max queues system wide = 32000
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
------ Semaphore Limits --------
max number of arrays = 32000
max semaphores per array = 32000
max semaphores system wide = 1024000000
max ops per semop call = 500
semaphore max value = 32767
4. 查看使用情况统计
bash
ipcs -u
5. 查看特定 ID 的详细信息
bash
ipcs -m -i 32769
六、配合 ipcrm 删除 IPC 资源
当需要清理 IPC 资源时,使用 ipcrm 命令:
bash
# 删除共享内存
ipcrm -m shmid
# 删除消息队列
ipcrm -q msqid
# 删除信号量
ipcrm -s semid
# 通过 key 值删除
ipcrm -M key
ipcrm -Q key
ipcrm -S key