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

标签 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 上运行的东西。

最佳答案

您的问题可能是 wait 调用立即返回,因为跟踪的“劣等”进程已挂起,等待您调试它。您将需要某种循环,在其中发出 ptrace 请求来检查子进程,然后恢复执行,然后再次调用 wait 以等待其挂起在下一个断点或其他什么地方。不幸的是,调试器 API 非常不可移植;您必须将该程序的大部分内容编写两次,一次针对 OSX,一次针对 Linux。

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

相关文章:

C变量是否可以在程序运行过程中随时删除或移除?

c - 内存访问冲突 readdir

c - U-Boot 2020.04 : Probing SPI flash fails - Invalid bus 0 (err=-19)

macos - cv2.waitKey(0) 不起作用,OpenCV 3.1.0,Mac OS X 10.11.6,Python 2.7.12

c++ - 无法为 Qt 的 waitForConnected 设置超时

c# - 从 C 获取字节数组到 C#

objective-c - 如何在没有额外自定义代码的情况下强制使正在运行的 Cocoa 程序失效?

ios - Xcode 8 无法存档 "Command/usr/bin/codesign failed with exit code 1"

Android Firebase 等待数据

javascript - 等待图像完全加载后再显示在页面上?