[linux] strace를 사용하여 자식 프로세스를 추적하는 방법은 무엇입니까?

나는 strace프로세스에 잠깐 붙였다. 이 프로세스는 90 개의 스레드를 생성했습니다. 문제가되는 스레드를 찾았을 때 부모 스레드, 조부모 스레드 등 루트 프로세스까지 지루하게 검색해야했습니다.

어떤 스레드가 다른 스레드를 생성했는지 신속하게 파악할 수있는 트릭이나 도구가 있습니까? 또는 더 나은 방법은 다음과 같은 스레드 생성 트리를 인쇄하는 것입니다 pstree.



답변

strace -ffork()에드 의 자식 프로세스를 추적 합니다.


답변

쉬운 방법이 보이지 않습니다.

-ffwith 옵션을 사용하여 -o filename여러 파일을 생성 할 수 있습니다 (pid 당 하나).

예 :

strace -o process_dump -ff ./executable
grep clone process_dump*

어떤 부모가 무엇을 만들 었는지 확인하는 데 도움이됩니다. 아마도 그것은 당신을 도울 것입니다-적어도 당신은 뒤로 검색 할 수 있습니다.


답변

라는 펄 스크립트가 strace-graph있습니다. 다음은 github버전입니다 . crosstool-ng 버전의 컴파일러 와 함께 패키지로 제공됩니다 . 크로스 플랫폼을 사용하여도 작동합니다.

ARM Linux 상자.

$ ./strace -f -q -s 100 -o app.trc -p 449
$ tftp -pr app.trc 172.0.0.133

X86_64 Linux 상자.

$ ./strace-graph /srv/tftp/app.trc
 (anon)
  +-- touch /tmp/ppp.sleep
  +-- killall -HUP pppd
  +-- amixer set Speaker 70%
  +-- amixer set Speaker 70%
  +-- amixer set Speaker 70%
  +-- amixer set Speaker 70%
  +-- amixer set Speaker 50%
  +-- amixer set Speaker 70%
  `-- amixer set Speaker 50%

출력은 기본 추적 로그를 탐색하는 데 사용할 수 있습니다.


답변

strace@stackmate가 제안한대로 단일 프로세스에 대한 트래픽을 캡처하려면을 사용할 수 있습니다 .

strace -f -e trace=network -s 10000 -p <PID>;

또는 파일로 출력하십시오.

strace -f -e trace=network -s 10000 -o dumpfile -p <PID>

-f모든 분기 된 프로세스, -s인쇄 할 문자열 크기 및 -o출력을 파일로 덤프합니다.


답변