統計Linux程序中的執行緒數


Linux程序可以被視為正在執行的程式例項,其中Linux中的每個執行緒只不過是程序的執行流程。您知道如何在Linux環境下檢視每個程序的執行緒數嗎?有多種方法可以計算執行緒數。本文將介紹如何讀取有關Linux上程序的資訊以及如何計算每個程序的執行緒數。

讀取程序資訊

要讀取程序資訊,請使用‘ps’命令。此命令用於讀取Linux上當前程序的快照。但是,ps -eps 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上統計程序中的執行緒數”了。我們將在下一篇文章中學習更多關於這些命令的資訊。繼續關注!

更新於:2020年7月7日

8K+ 次檢視

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.