最近我遇到了一个有趣的情况:
我在动态链接库(.so)中定义了一个全局静态变量。这个库总是在fork()下调用。
我注意到全局变量始终使用init值调用,并且不会在调用之间更改它们。
我有几个问题:
为什么'forked'会更改此变量的基本内存更新方法?我认为全局变量具有特定的内存映射
是否有人熟悉绕过它的方法?我只考虑将数据写入内核内存空间的方式(使用mmap)
谢谢大家!
答案 0 :(得分:1)
发出fork()
复制用户空间以便在子进程中使用(例外情况是文件句柄和未更改的变量 - 请参阅copy on write)。
因此,您的子全局变量将在fork时具有父级的值,但它是自己的变量。更改变量不会影响父级(或更新父级不会影响子级)。这是使用fork的原因之一。
如果您确实需要在父级和子级之间共享数据,请查看专门为此目的设计的共享内存方法。我不会直接尝试心理空间。