Existe um utilitário para pesquisar programas de cadeia de chamadas em um programa selecionado?

0

Eu tenho o programa mf cobol no unix. Eu preciso descobrir quantos programas chamados são chamados a partir dele e, em seguida, chamados programas dentro de programas chamados e assim por diante?

    
por Charu 07.11.2016 / 08:26

2 respostas

1

Se você quiser ver todos os programas iniciados por um comando, você pode usar strace com a opção -f para seguir as crianças também.

Por exemplo, coletando toda a saída de um comando bash -c no arquivo /tmp/out :

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

mostrará os comandos e seus parâmetros:

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

Como alternativa, supondo que seu kernel foi configurado com CONFIG_FTRACE, você pode usar execsnoop , um dos scripts da coleção de rastreamento e desempenho Brendan Gregg, para mostrar todos os comandos sendo executados no sistema. Exemplo de saída ao executar os mesmos 2 comandos acima:

$ 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...
    
por 07.11.2016 / 12:53
0

Não tenho certeza se é o que você quer, mas você pode usar

pstree <name_of_your_cobol_program_process>

que mostrará uma árvore de todos os subprocessos chamados pelo seu programa.

    
por 07.11.2016 / 10:08