计算 Linux 进程中的线程数

information technologylinux更新于 2026/1/13 22:07:17

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 上计算进程中的线程数"。我们将在下一篇 Linux 文章中了解更多关于这类命令的信息。请继续阅读!


相关文章


有用资源