线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被拆分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使拆分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功能让线程在并发执行时成为一个高效的机制。
在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。经典的命令行工具,如ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息。
这里提供了在Linux上显示某个进程的线程的几种方式。
[root@localhost ~]# man 1 ps
THREAD DISPLAY
H Show threads as if they were processes.
-L Show threads, possibly with LWP and NLWP columns.
m Show threads after processes.
-m Show threads after processes.
-T Show threads, possibly with SPID column.
[root@localhost ~]# ps auwwx | grep mysql | grep -v grep
mysql 1092 1.2 23.0 1143316 234368 ? Sl 10:51 0:10 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
[root@localhost ~]# ps -T -p 1092
PID SPID TTY TIME CMD
1092 1092 ? 00:00:00 mysqld
1092 1198 ? 00:00:00 mysqld
1092 1223 ? 00:00:00 mysqld
1092 1224 ? 00:00:00 mysqld
1092 1225 ? 00:00:00 mysqld
1092 1226 ? 00:00:00 mysqld
1092 1227 ? 00:00:00 mysqld
1092 1228 ? 00:00:00 mysqld
1092 1229 ? 00:00:00 mysqld
1092 1230 ? 00:00:00 mysqld
1092 1231 ? 00:00:00 mysqld
1092 1232 ? 00:00:00 mysqld
1092 1233 ? 00:00:00 mysqld
1092 2280 ? 00:00:00 mysqld
1092 2281 ? 00:00:00 mysqld
1092 2282 ? 00:00:00 mysqld
1092 2283 ? 00:00:00 mysqld
1092 2284 ? 00:00:00 mysqld
1092 2285 ? 00:00:00 mysqld
1092 2286 ? 00:00:00 mysqld
1092 2287 ? 00:00:00 mysqld
1092 2288 ? 00:00:00 mysqld
1092 2289 ? 00:00:00 mysqld
1092 2290 ? 00:00:00 mysqld
1092 2291 ? 00:00:00 mysqld
1092 2292 ? 00:00:00 mysqld
1092 2294 ? 00:00:00 mysqld
1092 2297 ? 00:00:00 mysqld
1092 2316 ? 00:00:09 mysqld
1092 2351 ? 00:00:00 mysqld
1092 2352 ? 00:00:00 mysqld
1092 2353 ? 00:00:00 mysqld
1092 2354 ? 00:00:00 mysqld
1092 2385 ? 00:00:00 mysqld
1092 2413 ? 00:00:00 mysqld
top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程,“-p”选项,可以选择查看的进程。在top运行时,也可以通过按“H”键将线程查看模式切换为开或关。
[root@localhost ~]# man 1 top
Global-defaults
A - Alt display Off (full-screen)
* d - Delay time 1.5 seconds
* H - Threads mode Off (summarize as tasks)
I - Irix mode On (no, `solaris' smp)
* p - PID monitoring Off (show all processes)
* s - Secure mode Off (unsecured)
B - Bold enable On (yes, bold globally)
[root@localhost ~]# top -H -p 1092
top - 11:12:07 up 20 min, 1 user, load average: 0.18, 0.12, 0.11
Threads: 35 total, 0 running, 35 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st
KiB Mem : 1016476 total, 199088 free, 534464 used, 282924 buff/cache
KiB Swap: 839676 total, 839640 free, 36 used. 315284 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2283 mysql 20 0 1143316 234368 8264 S 0.3 23.1 0:00.11 mysqld
1092 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.26 mysqld
1198 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
1223 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.02 mysqld
1224 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.08 mysqld
1225 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.04 mysqld
1226 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.03 mysqld
1227 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.04 mysqld
1228 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.03 mysqld
1229 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.07 mysqld
1230 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.07 mysqld
1231 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.02 mysqld
1232 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.07 mysqld
1233 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.07 mysqld
2280 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.03 mysqld
2281 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.04 mysqld
2282 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.01 mysqld
2284 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2285 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2286 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2287 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2288 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2289 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2290 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2291 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2292 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2294 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.00 mysqld
2297 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:00.08 mysqld
2316 mysql 20 0 1143316 234368 8264 S 0.0 23.1 0:14.28 mysqld
参考:https://linux.cn/article-5633-1.html