我用strace
附加到一個短暫的過程。該進程創建了90個線程。當我發現有問題的線程時,我不得不單調地搜索父線程,然後是祖父線程,等等直到根進程。如何使用strace跟蹤子進程?
有沒有什麼竅門或工具快速找出哪個線程創建了另一個?或者更好的是,打印像pstree
這樣的線程創建樹?
我用strace
附加到一個短暫的過程。該進程創建了90個線程。當我發現有問題的線程時,我不得不單調地搜索父線程,然後是祖父線程,等等直到根進程。如何使用strace跟蹤子進程?
有沒有什麼竅門或工具快速找出哪個線程創建了另一個?或者更好的是,打印像pstree
這樣的線程創建樹?
我看不到一個簡單的方法:
您可以使用-ff
選項與-o filename
生成多個文件(每個PID一個)。
如:
strace -o process_dump -ff ./executable
grep clone process_dump*
,這將有助於您瞭解哪些父創建的內容。也許這會幫助你 - 至少你可以向後搜索。
strace -f
跟蹤子進程的fork()
版。
有一個叫strace-graph
一個perl腳本。這是一個version from github。它與crosstool-ng版本的編譯器一起打包。它適用於我甚至使用跨平臺。
$ ./strace -f -q -s 100 -o app.trc -p 449
$ tftp -pr app.trc 172.0.0.133
$ ./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%
輸出可用於幫助導航主跟蹤日誌。
很漂亮,這是幾乎一模一樣的東西我想至少數天。令人驚訝的是,我甚至可以在我的/ usr/share/doc/strace/examples /中看到它。 – mykhal 2013-12-03 15:59:18