因此,当我运行 时$ ipcs
,该shared memory segment
部分会返回各种结果:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 524288 jvn 600 524288 2 dest
0x00000000 1048577 jvn 600 524288 2 dest
0x00000000 1769474 jvn 600 393216 2 dest
0x00000000 753667 jvn 600 524288 2 dest
0x00000000 1146884 jvn 600 16777216 2
该0x00000000
值存在于每个 IPC 对象中,为什么没有不同?这是什么意思?
为了提供更多背景信息,TLDP状态:
为了获得唯一的ID,必须使用密钥。密钥必须由客户端和服务器进程双方同意。这代表了为应用程序构建客户端/服务器框架的第一步。
当您使用电话呼叫某人时,您必须知道他们的号码。此外,电话公司必须知道如何将您的拨出电话中继到最终目的地。一旦对方通过接听电话做出响应,即建立连接。
对于 System V IPC 设施,
telephone'' correllates directly with the type of object being used. The
电话公司或路由方法可以直接与 IPC 密钥关联。通过将键值硬编码到应用程序中,键每次都可以是相同的值。这样做的缺点是密钥可能已经在使用中。通常,ftok() 函数用于为客户端和服务器生成键值。
答案1
通过在线课程找到了答案,来自 Linux 基金会认证的系统管理员内容:
请注意,几乎所有当前运行的共享内存段都有一个键
0
或0x00000000
(也称为 IPC_PRIVATE),这意味着它们仅在具有父/子关系的进程之间共享。