pstack命令用来显示进程的栈(用户态)跟踪。 pstack 命令必须由相应进程的属主或root账号运行。可以使用pstack来确定进程挂起的位置。此命令只有一个参数,那就是 pid。这里的pid可以是进程pid也可以是线程的 tid,当参数为 tid 时,pstack会将当前线程的调用栈打印出来,当参数为pid时则会将当前进程下所有线程的调用栈全部打印出来。具体关于pstack的简要介绍可以查看man手册。简单的多线程例子如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#include<stdio.h> #include<stdlib.h> #include <pthread.h> void* task_entry(void* arg); int main(){ pthread_t pid1,pid2; pthread_create(&pid1,NULL,task_entry,(void *)1); pthread_create(&pid2,NULL,task_entry,(void *)2); pthread_join(pid1,NULL); pthread_join(pid2,NULL); return 0; } void* task_entry(void* arg){ while(1){ sleep(1); } }
pstack用法如下,参数分别取线程tid和进程的pid:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33[root@localhost some_func]# gcc multithreading.c -o multithreading -lpthread [root@localhost some_func]# ./multithreading & [1] 23539 [root@localhost some_func]# pstree -p 23539 multithreading(23539)─┬─{multithreading}(23540) └─{multithreading}(23541) //线程 [root@localhost some_func]# pstack 23541 Thread 1 (process 23541): #0 0x00000031ce8aca7d in nanosleep () from /lib64/libc.so.6 #1 0x00000031ce8ac8f0 in sleep () from /lib64/libc.so.6 #2 0x0000000000400646 in task_entry () #3 0x00000031cf407aa1 in start_thread () from /lib64/libpthread.so.0 #4 0x00000031ce8e893d in clone () from /lib64/libc.so.6 //进程 [root@localhost some_func]# pstack 23539 Thread 3 (Thread 0x7f115e248700 (LWP 23540)): #0 0x00000031ce8aca7d in nanosleep () from /lib64/libc.so.6 #1 0x00000031ce8ac8f0 in sleep () from /lib64/libc.so.6 #2 0x0000000000400646 in task_entry () #3 0x00000031cf407aa1 in start_thread () from /lib64/libpthread.so.0 #4 0x00000031ce8e893d in clone () from /lib64/libc.so.6 Thread 2 (Thread 0x7f115d847700 (LWP 23541)): #0 0x00000031ce8aca7d in nanosleep () from /lib64/libc.so.6 #1 0x00000031ce8ac8f0 in sleep () from /lib64/libc.so.6 #2 0x0000000000400646 in task_entry () #3 0x00000031cf407aa1 in start_thread () from /lib64/libpthread.so.0 #4 0x00000031ce8e893d in clone () from /lib64/libc.so.6 Thread 1 (Thread 0x7f115e24a700 (LWP 23539)): #0 0x00000031cf4082fd in pthread_join () from /lib64/libpthread.so.0 #1 0x0000000000400613 in main ()
注意:pstack所追踪的是用户态调用栈
最后
以上就是腼腆歌曲最近收集整理的关于linux系统:pstack命令追踪进程的调用栈。的全部内容,更多相关linux系统:pstack命令追踪进程内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复