问题描述
我正在尝试在Linux核心转储中找到最旧的线程。所以我需要获取正在运行的每个线程的开始时间。那么有什么方法可以获取线程的开始时间。
我尝试在gdb核心文件中执行一些命令,但是这给了每个调用线程堆栈,但没有启动时间。
致谢
拉比
解决方法
我正在尝试在Linux核心转储中找到最旧的线程。因此,我需要获取正在运行的每个线程的开始时间。
您的结论与您先前的说法不符。
那么有什么方法可以获取线程的开始时间。
否:该时间未记录在线程结构中的任何地方。
但是,通常 Linux会按递增顺序分配线程ID,因此按线程ID进行排序应该可以为您提供所需的顺序。例如:
(gdb) info thread
Id Target Id Frame
* 1 Thread 0x7fa91e769740 (LWP 2128629) __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
2 Thread 0x7fa91d766700 (LWP 2128632) 0x0000557aa5787165 in fn ()
3 Thread 0x7fa91af61700 (LWP 2128637) 0x0000557aa5787165 in fn ()
4 Thread 0x7fa91df67700 (LWP 2128631) 0x0000557aa5787165 in fn ()
5 Thread 0x7fa91cf65700 (LWP 2128633) 0x0000557aa5787165 in fn ()
6 Thread 0x7fa91bf63700 (LWP 2128635) 0x0000557aa5787165 in fn ()
7 Thread 0x7fa91c764700 (LWP 2128634) 0x0000557aa5787165 in fn ()
8 Thread 0x7fa91a760700 (LWP 2128638) 0x0000557aa5787165 in fn ()
9 Thread 0x7fa91b762700 (LWP 2128636) 0x0000557aa5787165 in fn ()
10 Thread 0x7fa919f5f700 (LWP 2128639) 0x0000557aa5787165 in fn ()
在这里您可以看到首先创建了线程1,然后创建了线程4、2、5、7等(这里的LWP
是Linux线程ID)。