如何在aix上查看正在运行的进程的所有线程堆栈?

时间:2012-05-28 10:59:07

标签: multithreading process stack state aix

如何在AIX机器上查看正在运行的进程的所有线程的堆栈和状态。 linux上的 pstack 这样的命令或工具也应该有帮助..

我尝试了 procstack ,但没有帮助。它没有向我显示任何堆栈。并且没有错误..

任何想法..?

是procstack是否需要与使用debig info编译的进程相关的所有可执行文件和库?

感谢。

1 个答案:

答案 0 :(得分:5)

这是我用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