Linux 下查看进程内的线程情况 ps, top 命令

线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被拆分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使拆分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功能让线程在并发执行时成为一个高效的机制。

在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。经典的命令行工具,如ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息。

这里提供了在Linux上显示某个进程的线程的几种方式。

方法一 万能的ps命令

[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输出中开启线程查看,请调用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

你可能感兴趣的:(Linux/Unix学习)