IT袋

当前位置:主页 > 经验教程 > 系统教程 >

Linux服务器查看进程每个线程的执行任务

Linux服务器查看进程每个线程的执行任务(3)

时间:2024-03-09 15:06:30 来源:IT袋 作者:马勇
导读:Linux服务器查看进程每个线程的执行任务,编译这个程序,确保链接了pthread库: gcc -o multithread_example multithread_example.c -lpthread 然后,你可以运行这个程序,并使用 gdb 来附加到它: $ ./multithread_exa

Linux服务器查看进程每个线程的执行任务

编译这个程序,确保链接了pthread库:

gcc -o multithread_example multithread_example.c -lpthread

然后,你可以运行这个程序,并使用gdb来附加到它:

$ ./multithread_example &  # 在后台运行程序  
$ sudo gdb -p <进程ID>          # 使用gdb附加到进程
# gdb命令需要root权限

gdb提示符下,你可以使用info threads来查看所有线程的列表,然后使用thread <线程ID>来切换到特定的线程,并使用bt(backtrace)命令来查看该线程的堆栈跟踪。

示例gdb会话如下:

(gdb) info threads  
  Id   Target Id         Frame   
* 1    Thread 0x7ffff7fd6700 (LWP 12345) "multithread_exam" 0x00007ffff7a9c94d in __GI___nanosleep () at ../sysdeps/unix/syscall-template.S:81  
  2    Thread 0x7ffff77d5700 (LWP 12346) "multithread_exam" 0x00007ffff7a9c94d in __GI___nanosleep () at ../sysdeps/unix/syscall-template.S:81  
(gdb) thread 2  
[Switching to thread 2 (Thread 0x7ffff77d5700 (LWP 12346))]  
#0  0x00007ffff7a9c94d in __GI___nanosleep () at ../sysdeps/unix/syscall-template.S:81  
#1  0x00007ffff7a9c884 in sleep () at ../sysdeps/unix/sysv/linux/sleep.c:50  
#2  0x0000555555555114 in print_message_function (ptr=0x555555754f8c) at multithread_example.c:9  
#3  0x00007ffff7b936db in start_thread (arg=0x7ffff77d5700) at pthread_create.c:463  
#4  0x00007ffff78c988f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95  
(gdb) bt  
#0  0x00007ffff7a9c94d in __GI___nanosleep () at ../sysdeps/unix/syscall-template.S:81  
#1  0x00007ffff7a9c884 in sleep () at ../sysdeps/unix/sysv/linux/sleep.c:50  
#2  0x0000555555555114 in print_message_function (ptr=0x55

Linux服务器查看进程每个线程的执行任务

后台执行程序

Linux服务器查看进程每个线程的执行任务

gdb

5. perf top -p 进程ID

使用perf工具。

perf top -p 进程ID

这将显示按CPU使用率排序的进程和线程列表。你可以看到每个线程当前正在执行的函数。

注意:perf工具可能需要root权限来运行。

Linux服务器查看进程每个线程的执行任务

perf工具查看结果

上述分享的Linux服务器查看进程每个线程的执行任务的全部内容,网友们不妨在这方面予以借鉴

相关阅读