2010-10-29 87 views
69

我用strace附加到一個短暫的過程。該進程創建了90個線程。當我發現有問題的線程時,我不得不單調地搜索父線程,然後是祖父線程,等等直到根進程。如何使用strace跟蹤子進程?

有沒有什麼竅門或工具快速找出哪個線程創建了另一個?或者更好的是,打印像pstree這樣的線程創建樹?

回答

12

我看不到一個簡單的方法:

您可以使用-ff選項與-o filename生成多個文件(每個PID一個)。

如:

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

,這將有助於您瞭解哪些父創建的內容。也許這會幫助你 - 至少你可以向後搜索。

71

strace -f跟蹤子進程的fork()版。

15

有一個叫strace-graph一個perl腳本。這是一個version from 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 box。

$ ./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% 

輸出可用於幫助導航主跟蹤日誌。

+0

很漂亮,這是幾乎一模一樣的東西我想至少數天。令人驚訝的是,我甚至可以在我的/ usr/share/doc/strace/examples /中看到它。 – mykhal 2013-12-03 15:59:18