ptrace如何处理2个不同的进程?

时间:2016-02-10 09:51:19

标签: linux system-calls ptrace

我正在网上阅读有关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可执行文件的输入。

0 个答案:

没有答案