【问题标题】:In modern Linux is it possible to 'record' a process call tree?在现代 Linux 中是否可以“记录”进程调用树?
【发布时间】:2021-03-12 03:11:04
【问题描述】:

在与 Linux 亲密接触了大约 20 年后,我几乎不敢问这样一个基本问题——当我运行一个关于工作目录和进程调用(带参数)的进程时,是否有可能记录所有发生的事情?

我有以下情况:我运行一个构建工具,该工具运行的进程运行进程,其中一个会产生错误。即使使用环境变量和通常的 --verbose 参数,我也没有获得足够的信息来手动“重播”正在发生的事情,甚至无法识别行为不端的过程。

我知道set -x,但据我所知,它只影响当前的bash/sh 实例,而我启动的进程运行一个 Python 脚本,该脚本运行一个 Python 脚本,该脚本会在某些情况下运行 configure地点,可能是make 等。至少它对我没有多大帮助。

我也知道strace 哪个might be of some help,但是有没有办法提取进程调用和工作目录?以我的经验,它产生了如此多的输出,以至于几乎找不到我必须开始 greping 的地方..

我目前梦想会是这样的

precord python3 buildme.py

这至少会给我类似的东西

python3 buildme.py --verbose (/home/me/project/root)
├── /usr/bin/mkdir build (/home/me/project/root)
├── make all (/home/me/project/root/build)
│   ├── g++ -O2 -o bla.o bla.cpp
.   ├── ...
. 

(请忽略上面的流程树没有任何意义的事实 - 这是关于想法的)

这个问题不仅仅是解决这个谜题,而是我正在寻找一种通用的方法。

出于显而易见的原因,我非常希望这是最早发明的 Unix 工具之一,但不知何故,直到现在我才错过它。..

【问题讨论】:

  • 类似pstree?
  • 顺便说一句,你的问题在我看来属于superuser而不是StackOverflow。
  • @user1934428: pstree 只是给了我一个快照,并且没有启动进程的目录。所以当我想调查的呼叫已经终止时,这对我没有帮助跨度>
  • 啊,对。您是否只需要初始工作目录(当进程启动时),或者您是否还想跟踪进程内工作目录的任何更改?
  • strace -f -o strace.out -e trace=process,chdir,fchdir ... 然后写脚本解析输出文件?

标签: linux bash process command-line-arguments


【解决方案1】:

抱歉,此帐户尚无声誉:https://rr-project.org/ 应该会有所帮助,因为它可以记录程序运行和程序运行树,您可以使用带有 gdb 接口/脚本的 rr replayrr ps 来分析跟踪。

上帝保佑你,我希望你能找到一个有用的解决方案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多