pstack命令介绍
使用man查看pstack命令介绍:
NAME
gstack - print a stack trace of a running process
SYNOPSIS
gstack pid
DESCRIPTION
gstack attaches to the active process named by the pid on the command line, and prints out an execution stack trace. If ELF
symbols exist in the binary (usually the case unless you have run strip(1)), then symbolic addresses are printed as well.
If the process is part of a thread group, then gstack will print out a stack trace for each of the threads in the group.
使用示例
常用的场景是当程序卡壳时,我们想看看卡在哪里,这时可用pstack pid
查看,举个例子:
// test程序源代码test.cc
#include <unistd.h>
void func() {
while(1) {
sleep(1);
}
}
int main () {
func();
return 0;
}
编译:g++ test.cc -o test,然后./test &运行。
之后我们使用pstack命令看下test程序在做啥:
[root@ /]# ps aux |grep test
root 17262 0.0 0.0 16340 1024 pts/14 S 20:18 0:00 ./test
root 17266 0.0 0.0 115776 1004 pts/14 R+ 20:18 0:00 grep --color=auto test
[root@ /]# pstack 17262
#0 0x00007f9440a121a0 in __nanosleep_nocancel () from /lib64/libc.so.6
#1 0x00007f9440a12054 in sleep () from /lib64/libc.so.6
#2 0x00000000004005b5 in func() ()
#3 0x00000000004005c0 in main ()
可以看到程序运行到了sleep函数。