我正在寻找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上都可以使用的东西。

最佳答案

您的问题可能是wait调用立即返回,因为您知道跟踪的“劣等”进程已挂起,等待您对其进行调试。您将需要某种循环,在该循环中,您发出ptrace请求以检查子项,然后继续执行,然后再次调用wait以等待其在下一个断点或任何中断处挂起。不幸的是,调试器API极不可移植。您将不得不编写两次该程序的大部分内容,一次用于OSX,一次用于Linux。

关于c - 如何使用ptrace()观察过程直到退出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49038538/

10-11 15:15