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