C fork()情况下的全局变量值
最近我遇到了一个有趣的情况: 我在动态链接库(.so)中定义了一个全局静态变量。此库始终在fork()下调用 我注意到全局变量总是用init值调用,并且在调用之间不会更改它们 关于这一点,我有几个问题:C fork()情况下的全局变量值,c,linux,global-variables,fork,C,Linux,Global Variables,Fork,最近我遇到了一个有趣的情况: 我在动态链接库(.so)中定义了一个全局静态变量。此库始终在fork()下调用 我注意到全局变量总是用init值调用,并且在调用之间不会更改它们 关于这一点,我有几个问题: 为什么“分叉”会改变此变量的基本内存更新方法?我认为全局变量有一个特定的内存映射 有人熟悉绕过它的方法吗?我只想到了一种将数据写入内核内存空间的方法(使用mmap) 谢谢大家! 发出fork()复制用于子进程的用户空间(例外情况是文件句柄和未更改的变量-请参阅写入时复制)。 因此,您孩子的全局变
fork()
复制用于子进程的用户空间(例外情况是文件句柄和未更改的变量-请参阅写入时复制)。
因此,您孩子的全局变量在fork时将具有父变量的值,但它是自己的变量。更改变量不会影响父级(或者更新父级不会影响子级)。这是使用fork的原因之一
如果您确实需要在父级和子级之间共享数据,请查看专门为此目的设计的共享内存方法。我不会直接尝试使用心智空间。请参见答案。虽然共享库共享其代码,但它不会在不同进程之间共享其数据。