概述
pstack命令用来显示进程的栈(用户态)跟踪。 pstack 命令必须由相应进程的属主或root账号运行。可以使用pstack来确定进程挂起的位置。此命令只有一个参数,那就是 pid。这里的pid可以是进程pid也可以是线程的 tid,当参数为 tid 时,pstack会将当前线程的调用栈打印出来,当参数为pid时则会将当前进程下所有线程的调用栈全部打印出来。具体关于pstack的简要介绍可以查看man手册。简单的多线程例子如下:
#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:
[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命令追踪进程的调用栈。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复