2012-05-28 52 views
1

如何在AIX機器上查看正在運行的進程的所有線程的堆棧和狀態。 命令或工具,如的pstack在Linux上也應該幫助..如何查看aix上正在運行的進程的所有線程堆棧?

我試圖procstack,但沒有幫助。它沒有顯示任何堆棧給我。並沒有錯誤雖然..

任何想法..?

是procstack需要所有可執行文件和庫與用debig info編譯的進程相關嗎?

謝謝。

+0

你是如何使用procstack的?輸出是什麼? – Raam

+0

procstack PID或procstack -F PID 輸出是沒有什麼..沒有錯誤信息..剛剛到下一行... – sandeep

回答

4

以下是我用dbx編寫的腳本來打印給定進程ID的所有線程的堆棧。希望這會有所幫助,就像aix上的魅力一樣工作

if [ $# -ne 1 ] 
then 
    echo "Usage dbxstack <processid>"; 
    exit; 
fi 

rm -rf printthreads.fordbx 

echo "thread" >> printthreads.fordbx 
echo "detach" >> printthreads.fordbx 
echo "quit" >> printthreads.fordbx 

dbx -a $1 -c printthreads.fordbx > threads.tempdbx 2>/dev/null 
awk '$1 ~ /\$t/ { print $1 }' threads.tempdbx | sed s/\$t//g | sed s/\>//g > threadsids.tempdbx 

rm -rf printthreads.fordbx 
for i in `cat threadsids.tempdbx` 
do 
    echo "print \"------------------------\"" >> printthreads.fordbx 
    echo "thread current $i" >> printthreads.fordbx 
    echo "where" >> printthreads.fordbx 
    echo "print \"---------tid $i---------\"" >> printthreads.fordbx 
    i=$(($i+1)); 
    echo $i; 
done 
echo "detach" >> printthreads.fordbx 
echo "quit" >> printthreads.fordbx 

dbx -a $1 -c printthreads.fordbx > $1.stacktrace 2> $1.stacktracerr 

rm -rf threads.tempdbx threadsids.tempdbx printthreads.fordbx 
+0

非常有趣。如果我回到AIX環境,我將使用它。你可以顯着減少代碼,但是這看起來很穩定。即'awk'$ 1〜/ \ $ t/{gsub(/ \ $ t /,「」,$ 1; gsub(/ \> /,「」,$ 1; print $ 1}'threads.tempdbx |> threadsids.tempdbx'。其他簡化是可能的。祝大家好運。 – shellter

相關問題