我有一个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仅限于特定的线程.
希望你找到你所照顾的…