C语言 fork() 情况下的全局变量值



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

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

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

我对此有几个问题:

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

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

谢谢大家!

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

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

相关内容

  • 没有找到相关文章

最新更新