Linux 如何控制子进程的线程

Linux 如何控制子进程的线程,linux,multithreading,pthreads,fork,ptrace,Linux,Multithreading,Pthreads,Fork,Ptrace,我试图在调试器中实现以下功能:我想使用调试器控制正在调试的进程中的线程。 调试器是父进程,使用ptrace函数调试子进程,但我不知道如何从父进程控制子进程主进程以外的线程。我想使目标线程停止或继续。有没有办法做到这一点? 就像下面的代码一样 #include<pthread.h> #include<stdio.h> void *runner(void *param); int main(int argc,char *argv[]) { int pid;

我试图在调试器中实现以下功能:我想使用调试器控制正在调试的进程中的线程。 调试器是父进程,使用ptrace函数调试子进程,但我不知道如何从父进程控制子进程主进程以外的线程。我想使目标线程停止或继续。有没有办法做到这一点? 就像下面的代码一样

#include<pthread.h>
#include<stdio.h>

void *runner(void *param);
int main(int argc,char *argv[])
{
    int pid;
    pthread_t tid;
    pthread_attr_t attr;
    pid=fork();
    if(pid==0){
        pthread_attr_init(&attr);
        pthread_create(&tid,&attr,runner,NULL);
        pthread_join(tid,NULL);
        printf("CHILD VALUE=%d",value);
    }
    else if(pid>0){
        wait(NULL);
        printf("PARENT VALUE=%d",value);
    }
}


void *runner(void *param){
    int count = 0;
    while(1)
    { 
         printf("%d\n",count);
         count++;
         sleep(1);
    }
    pthread_exit(0);
}

在代码中,子进程创建一个线程以在循环中打印数字。我可以在父进程中使用ptrace之类的函数来控制线程吗?使其挂起或继续?

您可以使用互斥来进行进程间通信。只需将互斥对象传递给子进程,然后在子进程后台线程中等待它,而不锁定它,然后立即释放它。这样,如果父进程锁获得互斥锁,子进程将停止,如果它释放互斥锁,子进程将恢复。@mg30rg我不能这样做,因为我想在调试器中实现这一点,父进程是调试器,子进程正在调试,所以我不能修改源代码。然后相应地修改您的问题。这是一个值得一提的重要细节。@mg30rg好的,我将添加此细节在这个问题的答案中有一些很好的信息: