如何使用ptrace()来观察进程,直到它退出?

时间:2018-02-28 21:05:08

标签: c macos wait ptrace

我正在寻找ptrace()调用来观察流程,直到流程退出。

我有这个在OSX上用gcc / cc编译:

#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sys/ptrace.h>


int main(int argc, char *argv[]) {
    pid_t pidx = atoi(argv[1]);
    printf("pid = %jd\n", (intmax_t) pidx);
    ptrace(PT_ATTACHEXC, pidx, 0, 0);
    wait(NULL);
}

但是,即使使用有效/现有的pid,该程序仍会立即退出。我试图在pidx死后才退出此计划 这有可能吗?
理想情况下,我想要一些适用于OSX和Linux的东西。

1 个答案:

答案 0 :(得分:1)

您的问题可能是wait调用立即返回,因为跟踪的“劣质”进程暂停,您知道,等待您调试它。您将需要某种循环,在其中您发出ptrace请求以检查子进程然后继续执行,然后再次调用wait以等待它暂停到下一个断点或其他任何。不幸的是,调试器API非常不便携;你必须两次编写这个程序的大部分,一次用于OSX,一次用于Linux。