一尘不染

跟踪由Bash脚本调用的已执行程序

linux

脚本行为异常。我只需要通过修改行为异常的脚本就可以知道谁调用了该脚本,谁调用了调用脚本,等等。

这类似于堆栈跟踪,但是我对单个bash脚本中的函数调用的调用堆栈 感兴趣。相反,我需要由脚本启动的已执行程序/脚本链。


阅读 235

收藏
2020-06-07

共1个答案

一尘不染

因为您说可以编辑脚本本身,所以只需输入:

ps -ef >/tmp/bash_stack_trace.$$

在其中发生问题的地方。

这将在您的tmp目录中创建许多文件,这些文件会在发生时显示整个进程列表。

然后,您可以通过检查此输出来找出哪个进程调用了另一个进程。awk由于输出是常规的,因此可以手动完成,也可以使用诸如之类的方法自动完成-
您只需使用这些PIDPPID列即可计算出您感兴趣的所有流程之间的关系。

您需要密切注意文件,因为每个进程只有一个文件,因此可能需要对其进行管理。由于只有在调试期间才能执行此操作,因此大多数情况下该行会被注释掉(以开头#),因此不会创建文件。

要清理它们,您只需执行以下操作:

rm /tmp/bash_stack_trace.*
2020-06-07