Linux 清除子进程中的集合
我有一个多进程应用程序,我使用Linux 清除子进程中的集合,linux,callback,fork,trace,intel-pin,Linux,Callback,Fork,Trace,Intel Pin,我有一个多进程应用程序,我使用follow\u execv开关在Pin中跟踪它。简单地说,程序中存在一个fork。在出现fork之前,我创建了一个集合并进行了一些插入。就在fork之后,由于follow_execv开关,我的pintool的额外副本被创建并执行。父级和子级pintools都包含相同的内容。但是调用后,子对象中的集合将变为空。为什么会这样 注意:程序是gimp。它既是多进程的,又是多线程的。这类程序在Pin中有什么限制吗?只是一些想法。。。英特尔的Pin库分叉安全吗?如果是,那么可
follow\u execv
开关在Pin
中跟踪它。简单地说,程序中存在一个fork
。在出现fork
之前,我创建了一个集合并进行了一些插入。就在fork
之后,由于follow_execv
开关,我的pintool
的额外副本被创建并执行。父级和子级pintools
都包含相同的内容。但是调用后,子对象中的集合将变为空。为什么会这样
注意:程序是
gimp
。它既是多进程的,又是多线程的。这类程序在Pin
中有什么限制吗?只是一些想法。。。英特尔的Pin库分叉安全吗?如果是,那么可能是Pin库有一个at_fork
处理程序,用于清除fork上子级的状态。事实上,只清除了部分状态。我在父级中有一个计数器变量,其值在子级中保持不变@jww,这是一个很好的暗示。我创建了一个共享页面,以避免可能出现的Pin初始化混乱。嗯,我认为我应该放弃共享内存。在每个叉
之后,它们也通过销
移除。似乎使用文件
在父级和子级之间共享数据pintools
是最后一种解决方案。