나는 strace
프로세스에 잠깐 붙였다. 이 프로세스는 90 개의 스레드를 생성했습니다. 문제가되는 스레드를 찾았을 때 부모 스레드, 조부모 스레드 등 루트 프로세스까지 지루하게 검색해야했습니다.
어떤 스레드가 다른 스레드를 생성했는지 신속하게 파악할 수있는 트릭이나 도구가 있습니까? 또는 더 나은 방법은 다음과 같은 스레드 생성 트리를 인쇄하는 것입니다 pstree
.
답변
strace -f
fork()
에드 의 자식 프로세스를 추적 합니다.
답변
쉬운 방법이 보이지 않습니다.
-ff
with 옵션을 사용하여 -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
출력을 파일로 덤프합니다.