Met*_*est 7 c linux 64-bit x86 fork
您可能知道,应用程序中的所有线程都在分叉进程中死亡,而不是执行fork的线程.但是,我计划通过调用pthread_create并使用pthread_attr_setstack来重新分配forked进程中的那些线程,以便为新创建的线程分配与死线程相同的堆栈.如下所示.
// stackAddr and stacksize taken from the dead thread
pthread_attr_setstack(&attr, stackAddr, stacksize);
rc = pthread_create(&thread, &attr, threadRoutine, NULL);
Run Code Online (Sandbox Code Playgroud)
但是,我仍然需要获取CPU寄存器值,例如堆栈指针,基指针,指令指针等,以从同一点重新启动线程.我怎样才能做到这一点?还有什么我需要做才能成功实现我的目标?
另请注意,我使用的是64位架构.与32位相比,它会有什么额外的困难?
我看到两种可能的方法,搬起石头砸自己的脚,掉头发^W^W^W^W^W^W^W^W尝试这样做:
getcontext()在 之前调用fork(),然后通过 恢复每个线程的上下文setcontext()。可能行不通,但你可以尝试一下。ptrace(PTRACE_GETREGS),,ptrace(PTRACE_GETFPREGS)并用ptrace(PTRACE_SETREGS),恢复ptrace(PTRACE_SETFPREGS)。