2010-10-14 76 views
0

我想知道脚本启动的可执行文件以什么顺序(并且递归地跟踪这些可执行文件)。如何在linux中获取进程树的跟踪/日志?

例如,假设我这里有一个bash脚本(称为abc.sh):

#!/bin/bash 
ls 
gcc 

我想用运行此脚本“跟踪/ log命令”,并得到这样的事情:

abc.sh -- ls 
     |-- gcc -- cpp 
       -- cc1 
       ... etc. 

这表明abc.sh调用了ls和gcc。 gcc又称为cpp和cc1。

这可能吗?我该怎么做?类似上述的树形视图会很好,但更简单的视图也可以。

注意,我不想进程树的当前快照。相反,我需要一个产卵过程的踪迹或日志。时间标注也是有用的。

谢谢!

回答

0

您可以尝试分析strace命令的输出。 特别是,你会感兴趣的东西类似

strace -f -tt -e trace=execve ./abc.sh 
+0

你可能想要加一些输出重定向和一个grep,这样你就可以得到输出的exec部分。特别是如果您正在跟踪的脚本已输出:strace -f -e trace = execve ./t.sh 2>&1 | grep exec – 2010-10-15 00:01:09

+0

这个,我认为这会起作用。 我希望一些更高级的脚本/工具,它将执行以下操作:1. 如果有比execve的可产卵孩子其他命令,赶上那些为好。 2.以漂亮的树形式呈现它。 3.不打印不成功的execve命令(通常它会遍历整个PATH以查看exe是否存在)。 – 2010-10-15 00:20:34

+0

@Paul:我宁愿使用-o选项将strace输出重定向到一个文件。因为什么都不能阻止程序打印包含“exec”的东西给stderr,对吧? – 2010-10-15 05:46:07

0

可以使用pstree命令。它被设想显示你正在寻找什么:进程树(因此名称,pstree)。它不会给你流程追踪,但你可以多次调用它来获得类似于你正在寻找的东西。

+0

如果过程产卵和退出速度非常快? – 2010-10-15 00:18:42