Linux下查看進程和線程的方法

篇一 : Linux下查看進程和線程的方法

在Linux中查看線程數的三種方法

1、top -H
手冊中說:-H : Threads toggle
加上這個選項啓動top,top一行顯示一個線程。否則,它一行顯示一個進程。
2、ps xH
手冊中說:H Show threads as if they were processes
這樣可以查看所有存在的線程。
3、ps -mp <PID>
手冊中說:m Show threads after processes
這樣可以查看一個進程起的線程數。

查看進程

1. top 命令

top命令查看系統的資源狀況

  load average表示在過去的一段時間內有多少個進程企圖獨佔CPU

  zombie 進程 :不是異常情況。一個進程從創建到結束在最後那一段時間遍是殭屍。留在內存中等待父進程取的東西便是殭屍。任何程序都有殭屍狀態,它佔用一點內存資源,僅僅是表象而已不必害怕。如果程序有問題有機會遇見,解決大批量殭屍簡單有效的辦法是重起。kill是無任何效果的stop模式:與sleep進程應區別,sleep會主動放棄cpu,而stop是被動放棄cpu ,例單步跟蹤,stop(暫停)的進程是無法自己回到運行狀態的。

  cpu states:

  nice:讓出百分比irq:中斷處理佔用

  idle:空間佔用百分比 iowait:輸入輸出等待(如果它很大說明外存有瓶頸,需要升級硬盤(SCSI))

  Mem:內存情況

  設計思想:把資源省下來不用便是浪費,如添加內存後free值會不變,buff值會增大。 判斷物理內存夠不夠,看交換分區的使用狀態。

  交互命令:

  [Space]立即刷新顯示

  [h]顯示幫助屏幕

  [k] 殺死某進程。你會被提示輸入進程 ID 以及要發送給它的信號。 一般的終止進程可以使用15信號;如果不能正常結束那就使用信號9強制結束該進程。默認值是信號15。在安全模式中此命令被屏蔽。

  [n] 改變顯示的進程數量。你會被提示輸入數量。

  [u] 按用戶排序。

  [M] 按內存用量排序。

  [o][O] 改變顯示項目的順序。

  [P] 根據CPU使用百分比大小進行排序。

  [T] 根據時間/累計時間進行排序。

  [Ctrl+L] 擦除並且重寫屏幕。

  [q] 退出程序。

  [r] 重新安排一個進程的優先級別。系統提示用戶輸入需要改變的進程PID以及需要設置的進程優先級值。輸入一個正值將使優先級降低,反之則可以使該進程擁有更高的優先權。默認值是10。

  [S] 切換到累計模式。

  [s] 改變兩次刷新之間的延遲時間。系統將提示用戶輸入新的時間,單位爲s。如果有小數,就換算成m s。輸入0值則系統將不斷刷新,默認值是5 s。需要注意的是如果設置太小的時間,很可能會引起不斷刷新,從而根本來不及看清顯示的情況,而且系統負載也會大大增加。

  縮寫含義:

  PID每個進程的ID

  USER進程所有者的用戶名

  PRI每個進程的優先級別

  NI每個優先級的值

  SIZE 進程的代碼大小加上數據大小再加上堆棧空間大小的總數,單位是KB RSS 進程佔用的物理內存的總數量,單位是KB

  SHARE進程使用共享內存的數量

  STAT 進程的狀態。其中S代表休眠狀態;D代表不可中斷的休眠狀態;R代表運行狀態;Z代表僵死狀態;T代表停止或跟蹤狀態

  %CPU進程自最近一次刷新以來所佔用的CPU時間和總時間的百分比

  %MEM進程佔用的物理內存佔總內存的百分比

  TIME進程自啓動以來所佔用的總CPU時間

  CPU CPU標識

  COMMAND進程的命令名稱

2. ps命令

ps查看當前用戶的活動進程,如果加上參數可以顯示更多的信息,如-a,顯示所有用戶的進程


  ps ax :tty值爲“?”是守護進程,叫deamon 無終端,大多系統服務是此進程,內核態進程是看不到的

      ps axf :看進程樹,以樹形方式現實進程列表敲 ,init是1號進程,系統所有進程都是它派生的,殺不掉

      ps axm :會把線程列出來。在linux下進程和線程是統一的,是輕量級進程的兩種方式。

  ps axu :顯示進程的詳細狀態。

  vsz:說此進程一共佔用了多大物理內存。

  rss:請求常駐內存多少

查看線程

其實linux沒有線程,都是用進程模仿的

1. ps -ef f
用樹形顯示進程和線程,比如說我想找到proftp現在有多少個進程/線程,可以用

$ ps -ef f | grep proftpd
nobody 23117 1 0 Dec23 ? S 0:00 proftpd:  (accepting  connections)  
jack 23121 23117 0 Dec23 ? S 7:57 _ proftpd: jack - ftpsrv:  IDLE
jack 28944 23117 0 Dec23 ? S 4:56 _ proftpd: jack - ftpsrv:  IDLE

這樣就可以看到proftpd這個進程下面掛了兩個線程。
在Linux下面好像因爲沒有真正的線程,是用進程模擬的,有一個是輔助線程,所以真正程序開的線程應該只有一個。

2. pstree -c也可以達到相同的效果
$ pstree -c | grep proftpd
|-proftpd-+-proftpd
| `-proftpd

3. cat /proc/${pid}/status 
可以查看大致的情況

4.  pstack

有些系統可以用這個東東,可以查看所有線程的堆棧

如何查看進程中各線程的內存佔用情況?

用ps aux只能查看到進程,如果進程裏面使用了pthread編程,用什麼命令才能查詢到進程裏的線程資源佔用?
ps aux | grep不就是了

篇二 : 如何在Linux中查看所有正在運行的進程


你可以使用ps命令。它能顯示當前運行中進程的相關信息,包括進程的PID。Linux和UNIX都支持ps命令,顯示所有運行中進程的相關信息。ps命令能提供一份當前進程的快照。如果你想狀態可以自動刷新,可以使用top命令。

ps命令

輸入下面的ps命令,顯示所有運行中的進程:

# ps aux | less

其中,

-A:顯示所有進程

a:顯示終端中包括其它用戶的所有進程

x:顯示無控制終端的進程

任務:查看系統中的每個進程。

# ps -A# ps -e

任務:查看非root運行的進程

# ps -U root -u root -N

任務:查看用戶vivek運行的進程

# ps -u vivek

任務:top命令

top命令提供了運行中系統的動態實時視圖。在命令提示行中輸入top:

# top

按q退出,按h進入幫助。

任務:顯示進程的樹狀圖。

pstree以樹狀顯示正在運行的進程。樹的根節點爲pid或init。如果指定了用戶名,進程樹將以用戶所擁有的進程作爲根節點。

$ pstree

任務:使用ps列印進程樹

# ps -ejH# ps axjf

任務:獲得線程信息

輸入下列命令:

# ps -eLf# ps axms

任務:獲得安全信息

輸入下列命令:

# ps -eo euser,ruser,suser,fuser,f,comm,label# ps axZ# ps -eM

任務:將進程快照儲存到文件中

輸入下列命令:

# top -b -n1 > /tmp/process.log

你也可以將結果通過郵件發給自己:

# top -b -n1 | mail -s 'Process snapshot' [email protected]

任務:查找進程

使用pgrep命令。pgrep能查找當前正在運行的進程並列出符合條件的進程ID。例如顯示firefox的進程ID:

$ pgrep firefox

下面命令將顯示進程名爲sshd、所有者爲root的進程。

$ pgrep -u root sshd

向htop和atop說hello

htop是一個類似top的交互式進程查看工具,但是可以垂直和水平滾動來查看所有進程和他們的命令行。進程的相關操作(killing,renicing)不需要輸入PID。要安裝htop輸入命令:

# apt-get install htop

# yum install htop

在命令提示行中輸入htop:

# htop

atop工具

atop是一個用來查看Linux系統負載的交互式監控工具。它能展現系統層級的關鍵硬件資源(從性能角度)的使用情況,如CPU、內存、硬盤和網絡。

它也可以根據進程層級的CPU和內存負載顯示哪個進程造成了特定的負載;如果已經安裝內核補丁可以顯示每個進程的硬盤和網絡負載。輸入下面的命令啓動atop:

# atop

篇三 : Linux中查看進程的多線程


在SMP系統中,我們的應用程序經常使用多線程的技術,那麼在Linux中如何查看某個進程的多個線程呢?

本文介紹3種命令來查看Linux系統中的線程(LWP)的情況:

在我的系統中,用qemu-system-x86_64命令啓動了一個SMP的Guest,所以有幾個qemu的線程,以此爲例來說明。

1. pstree 命令

查看進程和線程的樹形結構關係

[root@jay-linux~]#pstree|grepqemu|-terminal-+-bash---qemu-sys---2*[{qemu-system-x8}][root@jay-linux~]#pstree-p|grepqemu|-terminal(194)-+-bash(196)---qemu-sys(657)-+-{qemu}(660)||`-{qemu}(661)

2. ps 命令

-L參數顯示進程,並儘量顯示其LWP(線程ID)和NLWP(線程的個數)。

[root@jay-linux~]#ps-eLf|grepqemuroot6571966570313:48pts/100:00:00qemu-sys-m1024-smp2root6571966603313:48pts/100:00:26qemu-sys-m1024-smp2root6571966612313:48pts/100:00:19qemu-sys-m1024-smp2root7899799107890114:02pts/000:00:00grep--color=autoqemu

上面命令查詢結果的第二列爲PID,第三列爲PPID,第四列爲LWP,第六列爲NLWP。

另外,ps命令還可以查看線程在哪個CPU上運行,命令如下:

[root@jay-linux~]#ps-eoruser,pid,ppid,lwp,psr,args-L|grepqemuroot6571966571qemu-sys-hdasmep-temp.qcow-m1024-smp2root6571966601qemu-sys-hdasmep-temp.qcow-m1024-smp2root6571966612qemu-sys-hdasmep-temp.qcow-m1024-smp2root8349799108341grep--color=autoqemu

其中,每一列依次爲:用戶ID,進程ID,父進程ID,線程ID,運行該線程的CPU的序號,命令行參數(包括命令本身)。

3. top 命令

其中H命令可以顯示各個線程的情況。(在top命令後,按H鍵;或者top -H)

[root@jay-linux~]#top-Htop-14:18:20up22:32,4users,loadaverage:2.00,1.99,1.90Tasks:286total,1running,285sleeping,0stopped,0zombieCpu(s):0.0%us,0.0%sy,0.0%ni,100.0%id,0.0%wa,0.0%hi,0.0%si,0.0%stMem:3943892ktotal,1541540kused,2402352kfree,164404kbuffersSwap:4194300ktotal,0kused,4194300kfree,787768kcachedPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND660root2001313m188m2752S2.34.90:46.78qemu-sys661root2001313m188m2752S2.04.90:39.44qemu-sys867root200152601312960R0.30.00:00.07top1root2001944415601252S0.00.00:00.34init2root200000S0.00.00:00.02kthreadd....

在top中也可以查看進程(進程)在哪個CPU上執行的。

執行top後,按f,按j(選中* J: P = Last used cpu (SMP)),然後按空格或回車退出設置,在top的顯示中會多出P這一列是最近一次運行該線程(進程)的CPU。

PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+PCOMMAND661root2001313m188m2752S2.34.90:44.243qemu-sys660root2001313m188m2752S2.04.90:51.740qemu-sys874root200152601284860R0.70.00:00.322top1root2001944415601252S0.00.00:00.340init2root200000S0.00.00:00.021kthreadd

更多信息,請 man pstree, man top, man ps 查看幫助文檔。

注:LWP爲輕量級進程(即:線程),(light weight process, or thread) 。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章