检查线程的方法
Last updated
Last updated
在现代操作系统中,线程是并行执行的主流编程概念。由于线程是在程序内部fork出来并发执行,这些线程共享一系列资源(如内存地址,打开的文件等)来最小化fork过载问题,并且线程可以避免使用昂贵的IPC(进程间通讯)通道。这些特性都使得线程在执行时具有高效的机制。
在Linux上,线程thread也称为轻量级进程(Lightweight Processes(LWP)),是在进程中创建的,所以会和进程具有相同的进程ID(PID)。对于Linux内核调度器来说,线程和标准进程除了共享一些资源外没有差异。
默认情况下,ps
和top
命令都只显示进程级别的信息。
ps
检查线程ps
命令的-T
参数可以激活线程视图,以下命令显示<pid>
创建的所有线程:
在显示输出中,PID
列就是进程,SPID
列就是线程
上述命令也可以使用 ps -L -p <pid>
通常,我们在检查java进程时候需要检查该进程的线程,则可以:
如果只需要获取线程tid,可以使用
例如ps -o ppid=1
就可以输出进程pid是1的所有进程和线程id:
上述命令就是显示
还有一个神奇的-o ppid=
使用方法,如果-o ppid=
没有带参数,则会输出指定进程的父进程pid
显示进程768
的父进程pid,或者使用ps -f 768
则可以完整显示进程命令,其中也包含了父进程PPID字段,则通过脚本可以截取字段。
参考 How do I get the parent process ID of a given child process?
显示所有线程方法一:
输出显示如下:
显示所有线程方法二:
输出显示如下:
显示指定进程所有线程:
输出类似
使用以下命令可以获得一个指定进程所有线程数量
要获得整个系统所有线程数量
top
检查线程top
命令启动的时候,参数-H
可以显示线程输出。在top
的交互界面中,H
按键可以切换线程
或进程
视图。
当
H
按键切换进程视图到线程视图时,可以看到top
显示左上角Tasks
(表示进程)转换成显示Threads
(表示线程),并且数量倍数增加。
要检查某个进程<pid>
对应的线程,可以使用
htop
htop是一个加强的进程观察工具。进入htop
之后,按下<F2>
可以进入设置菜单,选择Display option
,并选择Three View
和Show custom thread names
选项,然后按下<F10>
推出设置。
然后就可以观察每个进程的线程
通过检查 /proc/[pid]/task
可以看到指定进程的所有线程