【问题标题】:fork() call in cc语言中的fork()调用
【发布时间】:2011-09-27 07:51:26
【问题描述】:

我使用 fork() 创建了在 2 个不同地址空间上运行的 2 个不同进程。 现在,在父进程中,我需要子进程地址空间中的变量值,或者子进程是否可以修改父进程地址空间中的变量。 这可能吗?

【问题讨论】:

  • 所以也许您需要线程而不是单独的进程?
  • @PiotrekDe: operating on 2 different address spaces

标签: c fork


【解决方案1】:

不,一旦你分叉了,每个进程都会获得它自己的地址空间,你必须查看其中一个:

  • 进程之间的某种形式的 IPC 以访问彼此的数据(例如共享内存或消息队列)。
  • 一些更轻量级的 fork 变体,允许共享数据(可能包括线程)。

【讨论】:

    【解决方案2】:

    一旦你有两个进程,共享数据需要进程间通信:文件、管道或共享内存。

    【讨论】:

      【解决方案3】:

      如果您的意思是在这两个进程之间交换数据,则不能。您可以通过 SharedMemory、Message Passing、Pipeline、Socket 等系统 API 来实现...

      【讨论】:

        【解决方案4】:

        由于您使用 fork 命令创建了两个进程,因此两个进程都将位于不同的地址空间中,因此它们只能通过 IPC、消息传递、管道、共享内存等进行通信。否则一个进程无法访问其他进程数据。拥有流程特定的数据 同样,线程也有线程特定的数据

        【讨论】:

          猜你喜欢
          • 2011-09-21
          • 2018-06-16
          • 2020-08-16
          • 2014-02-16
          • 1970-01-01
          • 1970-01-01
          • 2012-02-02
          • 2021-12-17
          • 1970-01-01
          相关资源
          最近更新 更多