我需要监视Linux中具有已知PID的进程。一旦它被终止,想要执行一个带有终止原因的命令。
问题
- 如何订阅进程运行状况而不是轮询(例如观看命令)? 在
- 操作系统的用户空间中在哪里注入事件处理程序?
- 如何检测处理程序内部的终止/失败原因?
注意
- 我打算保持选项卡的进程没有分叉为某个父进程的子进程,通过它可以被监视。
- 进程类型是通用的(其中很多是守护程序)
获得对另一个进程的这种控制的唯一方法是使用 ptrace(2) 来跟踪目标进程。 您将使用 ptrace(PTRACE_ATTACH, pid)
附加到进程,之后您实际上成为目标进程的父进程(并且可以使用wait
或更多次ptrace
调用来确定进程正在做什么)。