2011-09-08 41 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)。

您還可以使用手動設置的共享內存方案來允許這兩個進程訪問公用內存。父進程將爲其共享內存中的數據結構分配存儲空間。兒童進程會將其映射到其空間並訪問這些結構。您需要使用某種同步機制,具體取決於您如何使用數據。

相關問題