在 Linux System V 进程通信机制中,共享内存、信号量、消息队列是三大核心 IPC 资源,内核会为每一个创建的 IPC 资源分配唯一标识符,也就是我们代码中常见的 shmid、semid、msqid。三者命名格式高度统一,仅前缀不同,本文清晰拆解其英文全称、含义及命名规则,方便快速记忆与区分。
一、shmid(共享内存标识符)
完整英文全称:shared memory identifier
缩写拆解:
-
shm:取自 shared memory,代表系统共享内存资源
-
id:取自 identifier,意为唯一标识符
shmid 是调用 shmget() 函数创建或获取共享内存后,内核返回的整型唯一编号。所有后续共享内存操作,包括挂载、读写、卸载、删除,都需要依靠 shmid 定位目标共享内存资源,是操作共享内存的核心凭证。
二、semid(信号量集标识符)
完整英文全称:semaphore identifier
缩写拆解:
-
sem:取自 semaphore,代表信号量(信号灯)资源,用于进程、线程同步互斥
-
id:取自 identifier,意为唯一标识符
semid 是调用 semget() 函数创建或获取信号量集后得到的内核唯一标识。后续通过 semop()、semctl() 完成信号量的加减操作、状态修改、销毁等功能时,均需传入 semid 指定操作对象。
三、拓展:msqid(消息队列标识符)
为完善 System V IPC 知识体系,补充同类命名规则的消息队列标识符:
完整英文全称:message queue identifier
缩写拆解:msq(message queue 消息队列)+ id(标识符)
由 msgget() 函数返回,专门用于操作系统消息队列资源。
四、统一命名规律(核心记忆点)
Linux System V IPC 整套接口遵循极简统一的命名规范,是新手快速区分的关键:
前缀区分资源类型:shm 对应共享内存、sem 对应信号量、msg 对应消息队列;
后缀统一固定:所有 IPC 资源标识符均以 id 结尾,代表内核唯一标识;
系统调用命名匹配:资源前缀 + get,即为创建/获取资源的函数名:shmget、semget、msgget。
五、关键避坑说明
新手编码时常出现低级错误:将 shmid、semid 变量名误写为 pid。二者完全无关:
pid 是进程 ID,标识系统进程;
shmid/semid/msqid 是 IPC 资源 ID,标识内核通信资源。
变量名严禁混用,否则会导致程序逻辑错误。
六、系统命令对应查看方式
可通过系统命令直接查看对应 IPC 资源,印证标识符作用:
-
ipcs -m:查看所有共享内存(shmid)资源
-
ipcs -s:查看所有信号量(semid)资源
-
ipcrm:根据对应 ID 删除 IPC 资源
网硕互联帮助中心



评论前必须登录!
注册