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

C fork()情况下的全局变量值,c,linux,global-variables,fork,C,Linux,Global Variables,Fork,最近我遇到了一个有趣的情况: 我在动态链接库(.so)中定义了一个全局静态变量。此库始终在fork()下调用 我注意到全局变量总是用init值调用,并且在调用之间不会更改它们 关于这一点,我有几个问题: 为什么“分叉”会改变此变量的基本内存更新方法?我认为全局变量有一个特定的内存映射 有人熟悉绕过它的方法吗?我只想到了一种将数据写入内核内存空间的方法(使用mmap) 谢谢大家! 发出fork()复制用于子进程的用户空间(例外情况是文件句柄和未更改的变量-请参阅写入时复制)。 因此,您孩子的全局变

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

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

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

关于这一点,我有几个问题:

  • 为什么“分叉”会改变此变量的基本内存更新方法?我认为全局变量有一个特定的内存映射

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

  • 谢谢大家!

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


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

    请参见答案。虽然共享库共享其代码,但它不会在不同进程之间共享其数据。