我使用dlopen
在我的程序中加载动态链接库(.so),名为dlsym
,以获取某个函数foo
的地址。
然后我在子流程中使用fork
并调用foo
,并使用exit(0)
退出子流程。到现在为止,一切都还好。
当我尝试fork
并在子流程中再次调用foo
时,我发现foo
中定义的静态变量存储的所有数据都已丢失。我确信我没有明确地调用像dlclose
这样的函数。那么如何防止数据消失?
非常感谢。
2 个答案:
答案 0 :(得分:1)
你想要共享内存。有关一些介绍性的指示,请参阅。然而,要预先警告,同步是棘手的,您可能最终会想要更高级别的抽象,如消息传递或信号量。
(或者,也许forking不是你正在寻找的模型。线程实际上是使用相同的进程内存空间拥有多个执行路径的概念......)
答案 1 :(得分:1)
fork
您的程序会重复其地址空间,包括foo
静态本地的存储空间。它是通过调用foo
在子进程中初始化的副本。
毫不奇怪,原始存储空间不变,正如您可以从第二个fork
看到的那样,并在该未初始化存储的第二个副本上调用foo
。