我正在网上阅读有关ptrace的内容,发现进程可以通过使用PTRACE_ATTACH请求跟踪另一个进程,但显然所有可用的示例都涉及使用fork()。
我想要的是拥有2个程序 - prg1.c和prg2.c,其中prg2.c应该跟踪prg1.c.我尝试在prg2.c中使用PTRACE_ATTACH,但似乎调用失败 - prg2.c无法跟踪prg1.c。 ptrace是如何工作的?有人可以解释一下吗?
prg1.c的代码:
#include <stdio.h>
#include <sys/ptrace.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
printf("Hello world\n");
sleep(20);
execl("/bin/ls", "ls", NULL);
return 0;
}
prg2.c的代码:
#include <stdio.h>
#include <sys/ptrace.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc , char **argv)
{
int pid = atoi(argv[1]);
int status;
if (ptrace(PTRACE_ATTACH, pid, NULL, NULL) == -1) {
printf("ptrace attach failed!");
return 0;
}
wait(&status);
sleep(5);
ptrace(PTRACE_DETACH, pid, NULL, NULL);
return 0;
}
我已经使用ps -af包含了一个sleep()以获取prg1的可执行文件的pid(在此期间),并将其作为prg2可执行文件的输入。