선택한 프로그램에서 호출자 체인을 검색할 수 있는 유틸리티가 있습니까?

선택한 프로그램에서 호출자 체인을 검색할 수 있는 유틸리티가 있습니까?

유닉스에 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>

그러면 프로그램에서 호출한 모든 하위 프로세스의 트리가 표시됩니다.

관련 정보