线程可以跟踪进程吗?

我有一个multithreades进程,必须控制另一个进程的执行.

为此,我从其中一个线程使用Ptrace.

这就是tracee的创建和启动方式.

switch( childPID=fork() ){
    case -1:   
         perror("fork()");
         return -1;
    case 0 :
         ptrace(PTRACE_TRACEME, 0, NULL, NULL); 
         execve(execPath,NULL,NULL);
         return -1;
   default:
         break;
}

这是流程的运行方式

while (1) {
    ptrace(PTRACE_CONT, childPID, 0, 0);
    waitpid( childPID, &status, 0);
    // inspect status and break in some cases
    ...
    ...
}

我有一个类似的非multithreades应用程序,完美地工作,加载exec并检查堆栈和内存没有问题.但是当我在multithreades上尝试这个配置时,我创建的进程根本不会运行.

我的问题是.如何从线程中跟踪进程?我是否必须改变附加过程的方式?

最佳答案 在多线程应用程序中,为了跟踪程序,您需要对每个特定线程使用ptrace,父进程使用ptrace(PTRACE_foo,pid,…)生成,其中pid是进程的线程ID.为了跟踪父本身,请在父代码中使用ptrace和pid = 0. ptrace仅限于特定的线程.

希望你找到你所照顾的…

点赞