Sistema Linux: el comando pstack rastrea la pila de llamadas del proceso.

El comando pstack se utiliza para mostrar el seguimiento de la pila (modo de usuario) del proceso . El comando pstack debe ser ejecutado por el propietario o la cuenta raíz del proceso correspondiente. Puede utilizar pstack para determinar dónde se bloquea el proceso. Este comando solo tiene un parámetro, pid. El pid aquí puede ser el pid del proceso o el hilo tid. Cuando el parámetro es tid, pstack imprimirá la pila de llamadas del hilo actual. Cuando el parámetro es pid, imprimirá todas las pilas de llamadas de todos los hilos del proceso actual. . Se puede encontrar una breve introducción sobre pstack en el manual man. Un ejemplo sencillo de varios subprocesos es el siguiente:

#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);
	}
}

El uso de pstack es el siguiente, los parámetros son el hilo tid y el pid del proceso:

[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 ()

Nota: Lo que pstack rastrea es la pila de llamadas del modo de usuario

Supongo que te gusta

Origin blog.csdn.net/wangquan1992/article/details/108415936
Recomendado
Clasificación