首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shmget()返回的shmget()是否是跨进程的唯一的?

shmget()返回的shmget()是否是跨进程的唯一的?
EN

Stack Overflow用户
提问于 2014-04-15 21:42:47
回答 2查看 1.4K关注 0票数 3

这是我真的搞不懂的:如果您在linux上用相同的键但在不同的进程中调用shmget(),您会不会得到相同的shmid?shmid是一个短暂的值,类似于一个文件描述符号,还是可以在调用中持久化的东西?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-15 22:01:19

是的,你会得到同样的施密德。共享内存描述符是内核级,而不是进程级.ipcs -m列出共享内存段。

来自曼斯克特

成功的IPC_INFO或SHM_INFO操作返回内核内部数组中最高使用项的索引,记录所有共享内存段的信息。(此信息可与重复的SHM_STAT操作一起使用,以获得有关系统上所有共享内存段的信息。)成功的SHM_STAT操作返回共享内存段的标识符,共享内存段的索引是在shmid中给出的。其他操作在成功时返回0。

来自man shmoverview

POSIX共享内存对象具有内核持久性:共享内存对象将一直存在,直到系统关闭,或直到所有进程取消对该对象的映射,并且该对象已被shm_unlink(3)删除。

票数 1
EN

Stack Overflow用户

发布于 2014-04-16 00:23:27

共享内存、信号量和消息队列共有的一个基本问题是,不同的进程如何找到适当的通信实例?请注意,POSIX (因此还有Linux)有两个不同的IPC家族-- system和" POSIX“--它们都是POSIX标准的一部分。他们或多或少地以同样的方式解决了这个问题,但是sysV有点复杂,而shmget来自于sysV的血统。

解决方案基本上是使用路径名,以便多个进程可以访问相同的资源。Posix只使用路径名(例如,shm_open的第一个参数)。SysV通过函数托克运行路径名(以及一个“项目id"),即”文件到键“,以到达shmget使用的”键“。将相同的路径名和项目id传递给ftok将产生相同的唯一键,而不管哪个进程正在执行。

这些IPC都具有内核持久性。当不再使用它们(在本例中称为shmdt )时,它们将被删除,并且一个进程使用适当的调用(在本例中为shmctl带有IPC_RMID选项)删除它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23095076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档