是否有实用程序可以在选定的程序中搜索调用程序链?

是否有实用程序可以在选定的程序中搜索调用程序链?

我在unix 中有mf cobol 程序。我需要找出从它调用了多少个被调用的程序,然后在被调用的程序中调用了程序等等?

答案1

如果您想查看由命令启动的所有程序,您也可以使用跟随子项的选项strace-f

例如,将bash -c命令的所有输出收集到文件中/tmp/out

$ strace -f -o /tmp/out -e execve bash -c 'ls -d . | cat -n; date' 
$ grep 'execve(' /tmp/out

将显示命令及其参数:

758   execve("/usr/bin/bash", ["bash", "-c", "ls -d . | cat -n; date"], ) = 0
759   execve("/usr/bin/ls", ["ls", "-d", "."],  <unfinished ...>
760   execve("/usr/bin/cat", ["cat", "-n"],  <unfinished ...>
761   execve("/usr/bin/date", ["date"], ) = 0

或者,假设您的内核配置了 CONFIG_FTRACE,您可以使用执行监听 是 Brendan Gregg 跟踪和性能集合中的脚本之一,用于显示系统上运行的所有命令。运行上面相同的 2 个命令时的输出示例:

$ sudo /opt/perf-tools-master/bin/execsnoop
Tracing exec()s. Ctrl-C to end.
Instrumenting sys_execve
   PID   PPID ARGS
  1567   2134 strace -f -o /tmp/out -e execve bash -c ls -d . | cat -n; date [...]
  1569   1567 bash -c ls -d . | cat -n; date
  1570   1569 ls -d .
  1571   1569 cat -n
  1572   1569 date
  1575   2134 grep execve( /tmp/out
^C
Ending tracing...

答案2

不确定这是否是您想要的,但您可以使用

pstree <name_of_your_cobol_program_process>

这将显示程序调用的所有子进程的树。

相关内容