Linux系统之ipcrm 命令详解
·
ipcrm 是 Linux 系统中用于移除进程间通信(IPC)资源的命令行工具。它允许用户删除消息队列、信号量集或共享内存段等 IPC 资源。这对于清理不再需要的 IPC 资源,或者解决由于 IPC 资源导致的问题非常有用。
基本语法
# 传统 Linux 历史语法
ipcrm [msg | shm | sem] <id>...
# SUS 兼容语法(支持按 ID 或 Key 删除)
ipcrm [选项]...
核心选项
按 ID 删除
| 选项 | 长格式 | 功能 |
|---|---|---|
-m |
--shmem-id <shmid> |
删除指定 ID 的共享内存段(需等待所有进程分离后生效)。 |
-q |
--queue-id <msgid> |
删除指定 ID 的消息队列。 |
-s |
--semaphore-id <semid> |
删除指定 ID 的信号量集。 |
按 Key 删除
| 选项 | 长格式 | 功能 |
|---|---|---|
-M |
--shmem-key <shmkey> |
删除由指定 Key 创建的共享内存段(需等待所有进程分离)。 |
-Q |
--queue-key <msgkey> |
删除由指定 Key 创建的消息队列。 |
-S |
--semaphore-key <semkey> |
删除由指定 Key 创建的信号量集。 |
批量删除
| 选项 | 长格式 | 功能 |
|---|---|---|
-a |
--all [shm msg sem] |
删除所有 IPC 资源(可指定类型)。 警告:谨慎使用,可能影响正在运行的程序! |
数字格式支持
- 十进制:直接输入数字(如
123456)。 - 十六进制:以
0x或0X开头(如0x7f00)。 - 八进制:以
0开头(如0123)。
常见示例
1. 按 ID 删除资源
# 删除 ID 为 123456 的共享内存段
ipcrm -m 123456
# 删除 ID 为 789012 的消息队列
ipcrm -q 789012
# 删除 ID 为 345678 的信号量集
ipcrm -s 345678
2. 按 Key 删除资源
# 删除由 Key 0x123456 创建的共享内存段
ipcrm -M 0x123456
# 删除由 Key 0x789abc 创建的消息队列
ipcrm -Q 0x789abc
# 删除由 Key 0xdef012 创建的信号量集
ipcrm -S 0xdef012
3. 批量删除所有资源
# 删除所有 IPC 资源
ipcrm -a
# 仅删除所有共享内存段和信号量集
ipcrm -a shm sem
输出说明
成功执行后,ipcrm 不会输出信息。若资源不存在或权限不足,会提示错误:
ipcrm: invalid argument for "-m": Invalid argument
ipcrm: permission denied
注意事项
-
共享内存段删除延迟:
- 使用
-m或-M删除共享内存段时,仅标记为“待删除”。 - 实际删除需等待所有附加的进程调用
shmdt()分离后生效。 - 可通过
ipcs -m查看nattch字段(当前附加进程数)判断状态。
- 使用
-
权限问题:
- 需 root 权限或资源拥有者身份。
- 普通用户只能删除自己创建的资源。
-
批量删除风险:
- 使用
-a时,可能意外删除正在使用的资源,导致程序崩溃。 - 建议先用
ipcs查看资源列表,确认目标后再删除。
- 使用
-
资源残留:
- 程序异常退出可能导致资源未清理,需手动删除。
调试建议
- 检查资源状态:
ipcs -m # 查看共享内存段 ipcs -q # 查看消息队列 ipcs -s # 查看信号量集 - 强制清理残留资源:
- 若程序崩溃导致资源残留,使用
ipcrm删除即可。
- 若程序崩溃导致资源残留,使用
更多推荐



所有评论(0)