我有创建许多子进程的进程。并且每个子进程可以创建后续子进程。 如何使用命令行参数获取所有已创建进程的列表? 我最好需要知道每个子进程的父进程。
所以我需要为每个进程获取pid,ppid和命令行。然后我可以分析这些数据。
在Windows中,我可以使用ProcessMonitor等工具收集这些数据(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 。但是,解析起来会更困难,因为需要过滤日志以仅包含我们感兴趣的流程树中的信息。答案 0 :(得分:2)
如果您的意思是在特定时刻获取该信息,那么 简单,您可能需要查看我对这些问题的回答,以便考虑其他事项:
恕我直言,在某个时刻获取各种流程信息的最简单方法是/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 < / p>