fork()

时间:2016-06-05 08:58:36

标签: c linux global-variables fork

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

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

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

我有几个问题:

  1. 为什么'forked'会更改此变量的基本内存更新方法?我认为全局变量具有特定的内存映射

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

  3. 谢谢大家!

1 个答案:

答案 0 :(得分:1)

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

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