問題: 我的程序在其內部創建並執行了多個線程,我怎樣才能在該程序創建線程后監控其中單個線程?我想要看到帶有它們名稱的單個線程詳細情況(如,CPU/內存使用率)。
線程是現代操作系統上進行並行執行的一個流行的編程方面的抽象概念。當一個程序內有多個線程被叉分出用以執行多個流時,這些線程就會在它們之間共享 特定的資源(如,內存地址空間、打開的文件),以使叉分開銷最小化,並避免大量高成本的IPC(進程間通信)通道。這些功能讓線程在並發執行時成為一個高 效的機制。
在Linux中,程序中創建的線程(也稱為輕量級進程,LWP)會具有和程序的PID相同的“線程組ID”。然后,各個線程會獲得其自身的線程 ID(TID)。對於Linux內核調度器而言,線程不過是恰好共享特定資源的標准的進程而已。經典的命令行工具,如ps或top,都可以用來顯示線程級 別的信息,只是默認情況下它們顯示進程級別的信息。
這里提供了在Linux上顯示某個進程的線程的幾種方式。
1、PS命令
在ps命令中,“-T”選項可以開啟線程查看。下面的命令列出了由進程號為的進程創建的所有線程。
ps -T -p <pid>
下面查看mysqld進程對應的線程
SPID就是線程號,CMD顯示線程名稱
2、top -H命令
直接使用top -H參數,就會顯示進程和線程
按H,切換threads On 或者off
要讓top輸出某個特定進程並檢查該進程內運行的線程狀況:
$ top -H -p <pid>
3、htop
一個對用戶更加友好的方式是,通過htop查看單個進程的線程,它是一個基於ncurses的交互進程查看器。該程序允許你在樹狀視圖中監控單個獨立線程。
要在htop中啟用線程查看,請開啟htop,然后按來進入htop的設置菜單。選擇“設置”欄下面的“顯示選項”,然后開啟“樹狀視圖”和“顯示自定義線程名”選項。按退出設置。
現在,你就會看到下面這樣單個進程的線程視圖。
4、pstree -p < pid >(樹狀圖顯示)