當前位置:才華齋>計算機>作業系統>

Linux下檢視程序和執行緒的方法

作業系統 閱讀(2.09W)

大家想知道在Linux下怎麼檢視程序和執行緒嗎?下面小編為大家整理了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

手冊中說: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不就是了