統計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上統計程序中的執行緒數”了。我們將在下一篇文章中學習更多關於這些命令的資訊。繼續關注!
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP