2011-09-08 42 views
3

vfork()之后,子进程如何修改或读取父进程中的数据? 在父进程中声明的变量是否可以直接访问子进程?可以通过vfork的子访问父变量吗?

我有一个创建一些数据结构的过程。然后我需要分叉需要读取/写入这些数据结构的子进程 。孩子将是一个不同于父母的被执行的过程。

+0

http://stackoverflow.com/questions/4259629/what-is-the-difference-between-fork-and-vfork –

回答

2

一个进程不能直接修改另一个的内存。你通常会做的是创建一个可以跨越流程边界的管道或其他机制。如果使用fork(),则打开的描述符将由子进程继承。然后它可以向父节点发送消息,指示它根据需要修改数据结构。

消息的形式可能是此设计的难题。您可以:

  1. 设计一个协议,该协议携带有关如何处理它们的值和说明。
  2. 使用现有的编组工具,如Google Protocol Buffers。
  3. 使用远程过程调用与现有的RPC机制之一(即SUN或ONC-RPC)。

您还可以使用手动设置的共享内存方案来允许这两个进程访问公用内存。父进程将为其共享内存中的数据结构分配存储空间。儿童进程会将其映射到其空间并访问这些结构。您需要使用某种同步机制,具体取决于您如何使用数据。

相关问题