当前位置:首页 > 文章列表 > 文章 > linux > Linux ipcmk 怎样创建指定大小的共享内存对象

Linux ipcmk 怎样创建指定大小的共享内存对象

来源:17golang原创 2026-10-30 17:03:03 0浏览 收藏

创建System V共享内存段可使用 ipcmk -M 大小。例如 ipcmk -M 6MiB -p 0600请求创建6MiB的共享内存,并限制为所有者读写;如果直接写整数,则按字节指定。创建后记录命令返回的共享内存标识,再用它查看和清理对象。

官方地址:https://github.com/util-linux/util-linux

先明确共享内存类型与容量单位

准备进程间通信实验时,先把“对象类型、请求大小、访问权限”写清楚。只写“创建6M内存”容易让脚本维护者分不清二进制单位还是十进制单位,也不清楚目标程序使用哪一套IPC接口。

本文沿着参数语义、写法对照和兼容注意来解释,不把已有命令包装成新提案。所有命令都是供读者在Linux实验环境操作的示例,本文没有实际创建或删除本地共享内存。

大小写法请求字节数含义
62914566291456明确写出字节数
6MiB62914566乘以1024的平方
6MB60000006乘以1000的平方

脚本中更建议使用完整的MiB或MB后缀,或直接写字节数,让单位一眼可辨。util-linux手册给出了这两种单位体系的大小参数定义。

用-M创建System V共享内存段

# 创建一个6MiB的System V共享内存段,访问权限设为所有者读写
ipcmk -M 6MiB -p 0600

记下这次调用返回的共享内存ID,也就是后文使用的shmid。不要把其他终端里旧实验的ID拿来替代,更不要凭列表中的位置猜测刚创建的是哪一个。

等价的容量表达可以写成下面这样,但两段命令是二选一的示例:执行两次会创建两个对象。

# 与6MiB相同的请求大小,直接用字节表达
ipcmk -M 6291456 -p 0600

命令创建的是IPC资源,并没有替应用完成读写协议设计。双方如何找到对象、何时附加以及如何同步访问,仍是使用该资源的程序要约定的内容。

ipcmk大小权限与共享内存段属性的关系
静态说明图:命令参数分组中的-M与-p分别关联请求容量和权限,共享内存对象分组包含大小、模式与shmid;这不是终端截图。

按对象标识查看容量和权限

将实际ID填入变量,再针对这一项查看详情。下面采用Shell必填变量检查,避免空ID被忽略;它不是自动寻找“最新对象”的脚本。

# 先设置为刚才返回的数字ID,再执行详情查询
: "${SHMID:?请先把SHMID设置为本次创建的共享内存ID}"
ipcs -m -i "$SHMID"

ipcs -m选择共享内存资源,-i指定单个对象详情。观察ID、所有者、权限及大小,确认它对应本次实验记录。不要把shmid与进程PID混用;它们代表不同对象。选项说明见ipcs官方手册。

理解与POSIX对象的区别

这里使用大写 -M创建System V共享内存。当前上游手册还列出小写 -m的POSIX共享内存选项,并要求配合 -n提供名称。不要因为只有大小写差异,就把两种对象当成可以直接替换的资源。

目标机器的util-linux版本可能与上游master不同。采用POSIX选项前先阅读本机帮助;若没有该选项,应按应用实际接口与发行版工具能力选择做法,而不是把-M输出的ID冒充POSIX名称。

# 读取目标机器提供的选项,不创建IPC资源
ipcmk --help

项目记录建议至少保留“类型、容量单位、权限、对象标识”。对System V保存shmid;对POSIX保存名称。清理工具也应沿用同一对象类型,不要只看字符串像不像一个数字。

System V共享内存实验记录与精确查询清理关系
静态结构图:实验记录关联shmid、容量与权限,工具分组通过同一shmid定位查询和清理对象,不表示命令已经执行。

结束实验时精确清理

实验结束并确认相关程序不再需要这个对象后,按本次记录的ID清理。下列命令会请求移除指定共享内存,不应使用未经核对的ID。

# 只移除本次实验确认过的System V共享内存段
: "${SHMID:?请先把SHMID设置为本次创建的共享内存ID}"
ipcrm -m "$SHMID"

共享内存仍被进程附加时,最终移除要等到相关附加解除。删除权限与生命周期说明见ipcrm官方手册。一次实验应记录创建与清理是否完成,避免重复运行时留下无法归属的对象。

为什么6MiB与6MB不一样?

两者分别采用1024与1000为倍率。把大小统一换成字节后对照,比只比较终端里显示的“6M”更清楚。

默认权限是否一定适合实验?

上游手册默认模式为0644。示例显式指定0600,意在让权限选择可见;需要其他进程访问时,应根据运行身份和协作方式重新设计,不能只为解决访问错误而随意扩大权限。

创建成功是否说明两个进程已经共享数据?

创建资源只是准备工作。还需要应用正确连接对象并约定数据布局与同步方式,不能把创建回执当作通信完成的证明。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Python plistlib 怎样把配置写成二进制 plistPython plistlib 怎样把配置写成二进制 plist
上一篇
Python plistlib 怎样把配置写成二进制 plist
JavaScript Path2D 怎样从 SVG 路径字符串构造可复用路径
下一篇
JavaScript Path2D 怎样从 SVG 路径字符串构造可复用路径
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    797次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    786次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    874次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    841次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    675次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码