统计Linux进程中的线程数
Linux进程可以被视为正在运行的程序实例,其中Linux中的每个线程只不过是进程的执行流程。您知道如何在Linux环境下查看每个进程的线程数吗?有多种方法可以计算线程数。本文将介绍如何读取有关Linux上进程的信息以及如何计算每个进程的线程数。
读取进程信息
要读取进程信息,请使用‘ps’命令。此命令用于读取Linux上当前进程的快照。但是,ps -e或ps aux命令会显示所有进程的名称。
要读取进程信息,请使用以下命令:
$ ps
示例输出应如下所示:
PID TTY TIME CMD 5843 pts/0 00:00:00 bash 5856 pts/0 00:00:00 ps
要显示所有进程名称,请使用以下命令:
$ ps -e
示例输出应如下所示:
PID TTY TIME CMD 1 ? 00:00:01 init 2 ? 00:00:00 kthreadd 3 ? 00:00:00 ksoftirqd/0 5 ? 00:00:00 kworker/0:0H 7 ? 00:00:07 rcu_sched 8 ? 00:00:00 rcu_bh 9 ? 00:00:02 rcuos/0 10 ? 00:00:00 rcuob/0 11 ? 00:00:00 migration/0 12 ? 00:00:00 watchdog/0 13 ? 00:00:00 watchdog/1 14 ? 00:00:00 migration/1 15 ? 00:00:00 ksoftirqd/1 17 ? 00:00:00 kworker/1:0H 18 ? 00:00:01 rcuos/1 19 ? 00:00:00 rcuob/1 20 ? 00:00:00 watchdog/2 21 ? 00:00:00 migration/2 22 ? 00:00:00 ksoftirqd/2 24 ? 00:00:00 kworker/2:0H 25 ? 00:00:04 rcuos/2 26 ? 00:00:00 rcuob/2 27 ? 00:00:00 watchdog/3 28 ? 00:00:00 migration/3 29 ? 00:00:00 ksoftirqd/3 31 ? 00:00:00 kworker/3:0H 32 ? 00:00:01 rcuos/3 33 ? 00:00:00 rcuob/3 34 ? 00:00:00 khelper 35 ? 00:00:00 kdevtmpfs 36 ? 00:00:00 netns 37 ? 00:00:00 perf 38 ? 00:00:00 khungtaskd 39 ? 00:00:00 writeback 40 ? 00:00:00 ksmd 41 ? 00:00:00 khugepaged 42 ? 00:00:00 crypto 43 ? 00:00:00 kintegrityd 44 ? 00:00:00 bioset 45 ? 00:00:00 kblockd 46 ? 00:00:00 ata_sff ............
计算每个进程的线程数
有多种方法可以计算每个进程的线程数。如下所示:
方法1 – /proc
这是查看Linux机器上任何活动进程的线程数最简单的方法。proc命令导出进程和系统硬件信息的文本文件,例如CPU、中断、内存、磁盘等。
要查看进程的线程数,请使用以下命令:
$ cat /proc/<pid>/status
例如,这里我们将PID添加为1041。然后,命令应如下所示:
$ cat /proc/1041/status
示例输出应如下所示:
Name: cups-browsed State: S (sleeping) Tgid: 1041 Ngid: 0 Pid: 1041 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 64 Groups: 0 VmPeak: 75364 kB VmSize: 75364 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 5932 kB VmRSS: 5932 kB VmData: 568 kB VmStk: 136 kB VmExe: 48 kB VmLib: 8712 kB VmPTE: 164 kB VmSwap: 0 kB Threads: 1 SigQ: 0/31329 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000001000 SigCgt: 0000000180004a02 CapInh: 0000000000000000 CapPrm: 0000003fffffffff CapEff: 0000003fffffffff CapBnd: 0000003fffffffff Seccomp: 0 Cpus_allowed: f Cpus_allowed_list: 0-3 Mems_allowed: 00000000,00000001 Mems_allowed_list: 0 voluntary_ctxt_switches: 134 nonvoluntary_ctxt_switches: 1
上面的示例每个进程只有一个线程。另一种方法是计算在/proc/<pid>/task中找到的目录数。
因为在进程中创建的每个线程,都会在/proc/<pid>/task中创建一个相应的目录,并以其线程ID命名。因此,/proc/<pid>/task中目录的总数表示进程中的线程数。
要验证它,请使用以下命令:
$ ls /proc/<pid>/task | wc
在上面的命令中,我们将PID设为1041,然后命令应如下所示:
$ ls /proc/1041/task | wc
示例输出应如下所示:
tp@linux:~$ ls /proc/1041/task |wc 1 1 5
上面的输出描述了1041个进程,其中包含一个目录。
方法2 – ps
ps命令使用“H”选项显示单个线程。以下命令显示进程的线程数。
$ ps hH p 1041 | wc -l
输出应如下所示:
tp@linux:~$ ps hH p 1041 | wc -l 1 tp@linux:~$
恭喜!现在您知道“如何在Linux上统计进程中的线程数”了。我们将在下一篇文章中学习更多关于这些命令的信息。继续关注!
广告