【问题标题】:how to view all thread stack of a running process on aix? [closed]如何查看aix上正在运行的进程的所有线程堆栈? [关闭]
【发布时间】:2012-06-02 18:06:05
【问题描述】:

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

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

有什么想法吗..?

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

谢谢。

【问题讨论】:

  • 你是如何使用 procstack 的,输出是什么?
  • procstack PID or procstack -F PID output is nothing..没有错误信息..刚到下一行...

标签: multithreading process stack state aix


【解决方案1】:

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

【讨论】:

  • 非常有趣。如果我回到 AIX 环境,我将使用它。您可以显着减少代码,但否则这看起来很可靠。 IE。 awk '$1 ~ /\$t/ { gsub(/\$t/,"", $1; gsub(/\&gt;/, "", $1; print $1 }' threads.tempdbx | &gt; threadsids.tempdbx。其他简化也是可能的。祝大家好运。
猜你喜欢
  • 1970-01-01
  • 2011-06-18
  • 2021-06-10
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多