我正在寻找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/