【发布时间】:2011-09-22 12:14:46
【问题描述】:
我遇到过这样一种情况,即在两个处理器之间多次调用 glibc/syscalls,其中一个是通过使用 CLONE_VM 调用 clone() 创建的,最终会导致我的程序崩溃。
根据我的理解,如果我打算使用 CLONE_VM t,那么我还必须指定 CLONE_SETTLS。
谁能给我一个示例,说明如何为我的新克隆准备 TLS 存储以及如何使用 CLONE_SETTLS 实际执行 clone() 调用?
【问题讨论】:
-
CLONE_VM不需要CLONE_SETTLS。vfork()使用CLONE_VM而不使用CLONE_SETTLS。 -
vfork 依赖其他进程不修改任何数据,理论上它应该立即调用 exec。 -- 在这种情况下,两个进程都将修改数据并进行 glibc/syscall。一切正常,直到他们同时进行一些需要 TLS 才能正常运行的调用。