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(樹狀圖顯示)

Centos中默認沒有安裝pstree工具,本地可以使用yum install  psmisc命令來安裝pstree工具。

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