我有创建许多子进程的进程。并且每个子进程都可能创建后续的子进程。 如何获取所有已创建进程及其命令行参数的列表? 我最好需要知道每个子进程的父进程。
所以我需要为每个进程获取 pid、ppid 和命令行。然后我可以分析这些数据。
在 Windows 中,我可以使用像 ProcessMonitor 这样的工具收集这些数据(它 Hook 像 CreateProcess 这样的系统调用)。 我想在 Linux 中也存在类似的机制吧?
编辑: 所以在Linux中有两种方式:
- 使用
exec strace -s 9999 -f -e trace=execve -p [进程的 pid] >& strace.log
。然后用一些简单的 perl 脚本解析它并生成一个子进程树。我最终使用了它。缺点是 strace 调试所有进程树。有些程序因此而失败。 - 使用
auditctl
。它直接记录特定的系统调用,无需调试。类似于 Windows 中的Process Monitor 工具。我没试过。可能会解析日志以生成子进程树,类似于 strace。不过,解析起来会更加困难,因为需要过滤日志以仅包含来 self 们感兴趣的进程树的信息。
最佳答案
如果您的意思是在某个特定时刻获取该信息,这不是那么简单,您可能需要查看我对这些问题的回答以了解其他需要考虑的事项:
- Linux: the most reliable way to terminate a family of processes
- 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
关于linux - 我需要跟踪 Linux(或 POSIX 系统)中给定进程创建的所有子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31298392/