【发布时间】:2013-12-11 04:07:12
【问题描述】:
在我的项目中,我需要附加到进程,恢复它们,然后使用ptrace 分离。但是,errno=ESRCH (No such process) 分离失败。
如果我不使用PTRACE_CONT 恢复进程,分离工作正常,但在这种情况下进程停止/无响应,这在我的项目中是不可接受的。在 Arch 和 Ubuntu 12.04 LTS 上测试,结果相同。
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
pid_t pid = 21000;
if (ptrace(PTRACE_ATTACH, pid, NULL, NULL) == -1) {
perror("PTRACE_ATTACH");
return 1;
}
printf("attached\n");
waitpid(pid, NULL, WUNTRACED);
if (ptrace(PTRACE_CONT, pid, NULL, NULL) == -1) {
perror("PTRACE_CONT");
return 1;
}
printf("continued\n");
if (ptrace(PTRACE_DETACH, pid, NULL, NULL) == -1) {
perror("PTRACE_DETACH");
return 1;
}
printf("detached\n");
return 0;
}
输出:
attached
continued
PTRACE_DETACH: No such process
【问题讨论】:
-
执行这样一个过程需要多长时间?
-
目标进程可以无限执行。我认为这可能是某种时间问题,但在 PTRACE_CONT 之后添加 sleep(10) 并不能解决失败的分离问题。