【问题标题】:Global variable value in case of fork() [duplicate]fork() 情况下的全局变量值 [重复]
【发布时间】:2016-10-05 00:58:37
【问题描述】:

最近遇到一个有趣的情况:

我在动态链接库 (.so) 中定义了一个全局静态变量。这个库总是在 fork() 下调用。

我注意到全局变量总是使用初始化值调用,并且不会在调用之间更改它们。

对此我有几个问题:

  1. 为什么被“分叉”会改变这个变量的内存更新的基本方法?我认为全局变量具有特定的内存映射

  2. 有人熟悉绕过它的方法吗?我只考虑了一种将数据写入内核内存空间的方式(使用 mmap)

谢谢大家!

【问题讨论】:

  • this 答案。
  • 虽然共享库共享其代码,但它确实在不同进程之间共享其数据。

标签: c linux global-variables fork


【解决方案1】:

发布fork() 复制用户空间以供子进程使用(例外情况是文件句柄和未更改的变量 - 请参阅写入时复制)。 因此,您孩子的全局变量在分叉时将具有父级的值,但它是自己的变量。更改变量不会影响父级(或更新父级不会影响子级)。这是使用 fork 的原因之一。

如果您确实需要在父子之间共享数据,请查看专门为此目的设计的共享内存方法。我不会直接尝试太多的心理空间。

【讨论】:

    猜你喜欢
    • 2018-06-15
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多