我需要跟踪 Linux(或 POSIX 系统)中给定进程创建的所有子进程
I need to trace all child processes created by given process in Linux (or POSIX system)
我有创建许多子进程的进程。并且每个子进程都可能创建后续的子进程。
如何获取所有已创建进程及其命令行参数的列表?
而我最好需要知道每个子进程的父进程。
所以我需要为每个进程获取 pid、ppid 和命令行。然后我可以分析这些数据。
在 Windows 中,我可以使用 ProcessMonitor(它挂钩 CreateProcess 等系统调用)之类的工具收集这些数据。
我想 Linux?
中也存在类似的机制
编辑:
所以在Linux中有两种方式:
- 使用
exec strace -s 9999 -f -e trace=execve -p [pid of process] >& strace.log
。然后用一些简单的 perl 脚本解析它并生成一个子进程树。我最终使用了它。缺点是 strace 调试所有进程树。有些程序因此而失败。
- 使用
auditctl
。它直接记录特定的系统调用,无需调试。类似于 Windows 中的 Process Monitor 工具。我没试过。可能会解析日志以生成子进程树,类似于 strace。但是,它会更难解析,因为需要过滤日志以仅包含来自我们感兴趣的进程树的信息。
如果您的意思是在某个特定时刻获取该信息,这并不那么那么简单,您可能需要查看我对这些问题的回答以了解其他需要考虑的事项:
- Python script to monitor process and sub-processes
恕我直言,在某个时刻获取各种进程信息的最简单方法是从/proc/<pid>
目录下的文件,参见http://man7.org/linux/man-pages/man5/proc.5.html
如果您想要进程整个生命周期的(历史)信息 strace
可能会捕获其中的一些信息(但它可能会影响性能,如果这对您有用,请不要这样做):https://superuser.com/questions/79869/will-strace-watch-system-calls-recursively-on-child-processes-of-the-main-proces
我有创建许多子进程的进程。并且每个子进程都可能创建后续的子进程。 如何获取所有已创建进程及其命令行参数的列表? 而我最好需要知道每个子进程的父进程。
所以我需要为每个进程获取 pid、ppid 和命令行。然后我可以分析这些数据。
在 Windows 中,我可以使用 ProcessMonitor(它挂钩 CreateProcess 等系统调用)之类的工具收集这些数据。 我想 Linux?
中也存在类似的机制编辑: 所以在Linux中有两种方式:
- 使用
exec strace -s 9999 -f -e trace=execve -p [pid of process] >& strace.log
。然后用一些简单的 perl 脚本解析它并生成一个子进程树。我最终使用了它。缺点是 strace 调试所有进程树。有些程序因此而失败。 - 使用
auditctl
。它直接记录特定的系统调用,无需调试。类似于 Windows 中的 Process Monitor 工具。我没试过。可能会解析日志以生成子进程树,类似于 strace。但是,它会更难解析,因为需要过滤日志以仅包含来自我们感兴趣的进程树的信息。
如果您的意思是在某个特定时刻获取该信息,这并不那么那么简单,您可能需要查看我对这些问题的回答以了解其他需要考虑的事项:
- Python script to monitor process and sub-processes
恕我直言,在某个时刻获取各种进程信息的最简单方法是从/proc/<pid>
目录下的文件,参见http://man7.org/linux/man-pages/man5/proc.5.html
如果您想要进程整个生命周期的(历史)信息 strace
可能会捕获其中的一些信息(但它可能会影响性能,如果这对您有用,请不要这样做):https://superuser.com/questions/79869/will-strace-watch-system-calls-recursively-on-child-processes-of-the-main-proces