Есть ли утилита для поиска цепочки вызовов программ в выбранной программе?

У меня есть программа mf cobol в unix. Мне нужно узнать, сколько вызываемых программ вызывается из него, а затем вызывается программ в вызываемых программах и так далее?

0
07.11.2016, 09:26
2 ответа

Если вы хотите увидеть все программы, запускаемые командой, вы можете использовать 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, вы можете использовать execsnoop , один из скриптов из коллекции трассировки и производительности Брендана Грегга, чтобы показать все команды, выполняемые в системе. Пример вывода при выполнении тех же 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...
1
28.01.2020, 02:47

Не уверен, что это то, что вы хотите, но вы можете использовать

pstree <name_of_your_cobol_program_process>

, который покажет дерево всех подпроцессов, вызываемых вашей программой.

0
28.01.2020, 02:47

Теги

Похожие вопросы