Linux中檢視程式的多執行緒
在SMP系統中,我們的應用程式經常使用多執行緒的技術,那麼在Linux中如何檢視某個程式的多個執行緒呢?
本文介紹3種命令來檢視Linux系統中的執行緒(LWP)的情況:
在我的系統中,用qemu-system-x86_64命令啟動了一個SMP的Guest,所以有幾個qemu的執行緒,以此為例來說明。
1. pstree 命令
檢視程式和執行緒的樹形結構關係
[root@jay-linux ~]# pstree | grep qemu |-terminal-+-bash---qemu-sys---2*[{qemu-system-x8}] [root@jay-linux ~]# pstree -p | grep qemu |-terminal(194)-+-bash(196)---qemu-sys(657)-+-{qemu}(660) | | `-{qemu}(661)
2. ps 命令
-L引數顯示程式,並儘量顯示其LWP(執行緒ID)和NLWP(執行緒的個數)。
[root@jay-linux ~]# ps -eLf | grep qemu root 657 196 657 0 3 13:48 pts/1 00:00:00 qemu-sys -m 1024 -smp 2 root 657 196 660 3 3 13:48 pts/1 00:00:26 qemu-sys -m 1024 -smp 2 root 657 196 661 2 3 13:48 pts/1 00:00:19 qemu-sys -m 1024 -smp 2 root 789 9799 10789 0 1 14:02 pts/0 00:00:00 grep --color=auto qemu
上面命令查詢結果的第二列為PID,第三列為PPID,第四列為LWP,第六列為NLWP。
另外,ps命令還可以檢視執行緒在哪個CPU上執行,命令如下:
[root@jay-linux ~]# ps -eo ruser,pid,ppid,lwp,psr,args -L | grep qemu root 657 196 657 1 qemu-sys -hda smep-temp.qcow -m 1024 -smp 2 root 657 196 660 1 qemu-sys -hda smep-temp.qcow -m 1024 -smp 2 root 657 196 661 2 qemu-sys -hda smep-temp.qcow -m 1024 -smp 2 root 834 9799 10834 1 grep --color=auto qemu
其中,每一列依次為:使用者ID,程式ID,父程式ID,執行緒ID,執行該執行緒的CPU的序號,命令列引數(包括命令本身)。
3. top 命令
其中H命令可以顯示各個執行緒的情況。(在top命令後,按H鍵;或者top -H)
[root@jay-linux ~]# top -H top - 14:18:20 up 22:32, 4 users, load average: 2.00, 1.99, 1.90 Tasks: 286 total, 1 running, 285 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 3943892k total, 1541540k used, 2402352k free, 164404k buffers Swap: 4194300k total, 0k used, 4194300k free, 787768k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 660 root 20 0 1313m 188m 2752 S 2.3 4.9 0:46.78 qemu-sys 661 root 20 0 1313m 188m 2752 S 2.0 4.9 0:39.44 qemu-sys 867 root 20 0 15260 1312 960 R 0.3 0.0 0:00.07 top 1 root 20 0 19444 1560 1252 S 0.0 0.0 0:00.34 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd ....
在top中也可以檢視程式(程式)在哪個CPU上執行的。
執行top後,按f,按j(選中* J: P = Last used cpu (SMP)),然後按空格或回車退出設定,在top的顯示中會多出P這一列是最近一次執行該執行緒(程式)的CPU.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ P COMMAND 661 root 20 0 1313m 188m 2752 S 2.3 4.9 0:44.24 3 qemu-sys 660 root 20 0 1313m 188m 2752 S 2.0 4.9 0:51.74 0 qemu-sys 874 root 20 0 15260 1284 860 R 0.7 0.0 0:00.32 2 top 1 root 20 0 19444 1560 1252 S 0.0 0.0 0:00.34 0 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 1 kthreadd
更多資訊,請 man pstree, man top, man ps 檢視幫助文件。
注: LWP為輕量級程式(即:執行緒),(light weight process, or thread) 。
via http://smilejay.com/2012/06/linux_view_threads/
相關文章
- 如何在Linux中檢視所有正在執行的程式Linux
- 執行緒以及多執行緒,多程式的選擇執行緒
- 多執行緒-程式和執行緒的概述執行緒
- Linux程式多執行緒入門Linux執行緒
- linux 多執行緒程式設計Linux執行緒程式設計
- 多執行緒,多程式執行緒
- linux 檢視 程式 執行緒數Linux執行緒
- Linux下的多執行緒程式設計Linux執行緒程式設計
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 4、Linux多執行緒,執行緒同步(2)Linux執行緒
- Linux 多執行緒程式設計(不限Linux)Linux執行緒程式設計
- Linux下的多執行緒程式設計(轉)Linux執行緒程式設計
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- linux-多執行緒Linux執行緒
- 程式設計思想之多執行緒與多程式(3):Java 中的多執行緒程式設計執行緒Java
- 【java】【多執行緒】程式、執行緒的基本概念(1)Java執行緒
- Oracle中檢視已執行sql的執行計劃OracleSQL
- Java多執行緒1:程式與執行緒概述Java執行緒
- 多執行緒-匿名內部類的方式實現多執行緒程式執行緒
- Linux C++ 多執行緒程式設計LinuxC++執行緒程式設計
- Python 多執行緒多程式Python執行緒
- PHP 的多程式與執行緒PHP執行緒
- Java 程式中的多執行緒Java執行緒
- .NET多執行緒程式設計(1):多工和多執行緒 (轉)執行緒程式設計
- Android中的多程式、多執行緒Android執行緒
- Python的多程式和多執行緒Python執行緒
- linux程式多執行緒互斥鎖的簡單使用Linux執行緒
- 多執行緒和多執行緒同步執行緒
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計
- 程式設計思想之多執行緒與多程式(4):C++ 中的多執行緒程式設計執行緒C++
- Linux c多執行緒執行順序Linux執行緒
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- 多執行緒-多執行緒常見的面試題執行緒面試題
- 執行緒的【生命週期】和【執行緒的同步】(多視窗售票例子)執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒