gpt4 book ai didi

c - fork 后重新创建死线程

转载 作者:IT王子 更新时间:2023-10-29 00:33:15 26 4
gpt4 key购买 nike

您可能知道,应用程序中的所有线程都死于 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);

但是,我仍然需要获取 CPU 寄存器值,例如堆栈指针、基指针、指令指针等,以从同一点重新启动线程。我怎样才能做到这一点?我还需要做什么才能成功实现我的目标?

另请注意,我使用的是 64 位架构。与 32 位相比,它会有什么额外的困难?

最佳答案

我看到了两种可能的搬起石头砸自己的脚和脱发的方法^W^W^W^W^W^W^W^W尝试这样做:

  • 尝试强制每个线程在fork()之前调用getcontext(),然后通过setcontext() 。可能行不通,但您可以试试看。
  • 保存ptrace(PTRACE_GETREGS)ptrace(PTRACE_GETFPREGS),并使用ptrace(PTRACE_SETREGS)ptrace(PTRACE_SETFPREGS)恢复

关于c - fork 后重新创建死线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7918525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com