一个vfork子进程能够访问父进程的变量吗?

4
在调用vfork()后,子进程会在父进程的地址空间中运行,因此子进程可以直接访问父进程的变量。如果子进程修改了这些变量,则会影响父进程中相应变量的值。但要注意,子进程必须立即调用execve()或_exit()之一,否则可能会导致不可预测的结果。
对于您的情况,您的子进程可以直接读写父进程创建的数据结构。在执行execve()或_exit()之前,请确保子进程不再需要这些数据结构,并且不会在子进程和父进程之间造成竞争条件。

https://dev59.com/gG855IYBdhLWcg3wlVYZ - Blagovest Buyukliev
1个回答

3

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

消息的形式可能是这种设计中比较困难的部分。你可以:

  1. 设计一种协议来传递值和对这些值的操作指令。
  2. 使用现有的编组工具,如Google Protocol Buffers。
  3. 使用远程过程调用(RPC)机制之一(例如SUN或ONC-RPC)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接