Created
October 15, 2022 09:43
-
-
Save guangxuanliu/0e2810bbeeda2d0f852e42d9e905a2bb to your computer and use it in GitHub Desktop.
Linux下的pstack工具
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
if test $# -ne 1; then | |
echo "Usage: `basename $0 .sh` <process-id>" 1>&2 | |
exit 1 | |
fi | |
if test ! -r /proc/$1; then | |
echo "Process $1 not found." 1>&2 | |
exit 1 | |
fi | |
# GDB doesn't allow "thread apply all bt" when the process isn't | |
# threaded; need to peek at the process to determine if that or the | |
# simpler "bt" should be used. | |
backtrace="bt" | |
if test -d /proc/$1/task ; then | |
# Newer kernel; has a task/ directory. | |
if test `/bin/ls /proc/$1/task | /usr/bin/wc -l` -gt 1 2>/dev/null ; then | |
backtrace="thread apply all bt" | |
fi | |
elif test -f /proc/$1/maps ; then | |
# Older kernel; go by it loading libpthread. | |
if /bin/grep -e libpthread /proc/$1/maps > /dev/null 2>&1 ; then | |
backtrace="thread apply all bt" | |
fi | |
fi | |
GDB=${GDB:-/usr/bin/gdb} | |
if $GDB -nx --quiet --batch --readnever > /dev/null 2>&1; then | |
readnever=--readnever | |
else | |
readnever= | |
fi | |
# Run GDB, strip out unwanted noise. | |
$GDB --quiet $readnever -nx /proc/$1/exe $1 <<EOF 2>&1 | | |
set width 0 | |
set height 0 | |
set pagination no | |
$backtrace | |
EOF | |
/bin/sed -n \ | |
-e 's/^\((gdb) \)*//' \ | |
-e '/^#/p' \ | |
-e '/^Thread/p' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
pstack工具其实就是一个脚本,可以把这个脚本放在
/usr/bin
下面,然后赋予可执行权限即可使用。