1. 程式人生 > >linux檢視程序所有子程序和執行緒

linux檢視程序所有子程序和執行緒

linux檢視程序所有子程序和執行緒

原文連線:https://blog.csdn.net/uestczshen/article/details/74091892

  

問題: 我的程式在其內部建立並執行了多個執行緒,我怎樣才能在該程式建立執行緒後監控其中單個執行緒?我想要看到帶有它們名稱的單個執行緒詳細情況(如,CPU/記憶體使用率)。

執行緒是現代作業系統上進行並行執行的一個流行的程式設計方面的抽象概念。當一個程式內有多個執行緒被叉分出用以執行多個流時,這些執行緒就會在它們之間共享特定的資源(如,記憶體地址空間、開啟的檔案),以使叉分開銷最小化,並避免大量高成本的IPC(程序間通訊)通道。這些功能讓執行緒在併發執行時成為一個高效的機制。

在Linux中,程式中建立的執行緒(也稱為輕量級程序,LWP)會具有和程式的PID相同的“執行緒組ID”。然後,各個執行緒會獲得其自身的執行緒ID(TID)。對於Linux核心排程器而言,執行緒不過是恰好共享特定資源的標準的程序而已。經典的命令列工具,如ps或top,都可以用來顯示執行緒級別的資訊,只是預設情況下它們顯示程序級別的資訊。

這裡提供了在Linux上顯示某個程序的執行緒的幾種方式。

注:lwp      LWP    lwp (light weight process, or thread) ID of the lwp being reported. (alias spid, tid).就是說lwp spid tid都是指執行緒ID.

1.利用程序名獲取程序號(以syslog為例)

ps -ef|grep syslog|grep -v "grep"|awk '{print $2}'

先看ps -ef|grep syslog的輸出:(我沒有打馬賽克,千萬不要攻擊我的電腦啊)

grep的輸出都會有grep自身這個程序在,用grep -v "grep"可以把這一行幹掉,然後awk '{print $2}'就是列印第二列數字,即722

2.利用程序號檢視該程序下的執行緒

    ps -eLf|grep 722|grep -v "grep" ,輸出如下:

第四列就是執行緒號

   ps -T -p 722,輸出如下:(SPID即執行緒號)

3,利用top -H -p 722檢視執行緒cpu利用率

第二行(Threads):總共4個執行緒,0個正在執行,4個睡眠,0個stopped, 0個zombie(殭屍),%CPU和%MEM即cpu佔有率和記憶體佔有率,其他欄位含義參考top命令

4.pstree -p 722(樹狀圖顯示)