如何查看進(jìn)程開啟了多少線程

為什么要知道某個進(jìn)程開啟了多少線程倔喂?

  • 好奇

  • 性能調(diào)優(yōu)

概念澄清


  • 這里所說的線程指的是內(nèi)核級別的線程谷市,不是用戶態(tài)線程,所謂用戶態(tài)線程是指不依賴操作系統(tǒng)而是在用戶態(tài)下實現(xiàn)的執(zhí)行流調(diào)度郁妈。

  • 這里的線程個數(shù)指的是進(jìn)程運行時的線程個數(shù)猩系,這個數(shù)值會隨著線程的創(chuàng)建和銷毀而動態(tài)變化。

  • 本文主要關(guān)注Linux平臺兆蕉。

背景知識與原理


  • /proc/{pid}

/proc/{pid}下記錄了每個進(jìn)程運行時的所有關(guān)鍵信息羽戒,那這些信息是誰來生成的呢,答案是Linux內(nèi)核虎韵。

Linux內(nèi)核在執(zhí)行你寫的程序時易稠,將所有關(guān)鍵信息寫到了/proc/{pid}下,因此你可以通過查看這個目錄下的信息來或者進(jìn)程的運行時行為包蓝,這對于那些好奇內(nèi)核是如何運行程序的同學(xué)是非常重要的驶社。

你可以把這個目錄下的信息理解為Linux內(nèi)核在執(zhí)行你寫的程序時所打印的Log。通過該Log你就可以知道進(jìn)程開啟了多少線程了测萎。

  • 進(jìn)程號:pid

Linux內(nèi)核在執(zhí)行程序時需要為每個進(jìn)程分配一個id亡电,類似于身份證號的作用,用于識別進(jìn)程硅瞧,因此想獲取某個進(jìn)程開啟了多少線程首先必須要知道是進(jìn)程id份乒。

實驗開始


  • 實驗一:最簡單的情況

我們來看一下最簡單的helloworld程序有多少線程:

#include <iostream>
#include <unistd.h>

int main()
{
        std::cout<<"helloworld";
        sleep(1000); //保持進(jìn)程不退出

        return 0;
}

接下來編譯運行:

$ g++ s.cpp -o helloworld
$ ./helloworld &
[1] 125626

我們可以發(fā)現(xiàn),該helloworld進(jìn)程的進(jìn)程號是125626腕唧,有了進(jìn)程號我們就可以查看該進(jìn)程開啟多少線程了或辖。運行如下命令:

$ cat /proc/125626/status | grep Threads
Threads:        1

可以看到,和我們的預(yù)期是一樣的枣接,該helloworld進(jìn)程僅有開啟了一個線程颂暇。

  • 實驗二:稍復(fù)雜的情況

在這個實驗中,我們動態(tài)創(chuàng)建線程:

#include <pthread.h>
#include <unistd.h>

void* func(void* arg) {
        sleep(10000);
}

int main()
{
        pthread_t id;
        for (int i=0;i<10;i++) {
                pthread_create(&id,NULL, func,NULL);
                sleep(10);
        }

        return 0;
}

在這個程序當(dāng)中但惶,我們動態(tài)創(chuàng)建了10個線程耳鸯,每創(chuàng)建一個線程sleep10秒湿蛔,每個線程sleep10000秒。編譯運行:

$ g++ s.cpp -lpthread -o helloworld
$ ./helloworld &
[1] 125667
$ cat /proc/125667/status | grep Threads
Threads:        2
$ cat /proc/125667/status | grep Threads
Threads:        2
$ cat /proc/125667/status | grep Threads
Threads:        3
$ cat /proc/125667/status | grep Threads
Threads:        4
$ cat /proc/125667/status | grep Threads
Threads:        5
$ cat /proc/125667/status | grep Threads
Threads:        6
$ cat /proc/125667/status | grep Threads
Threads:        10

可以看到县爬,當(dāng)用cat查看線程數(shù)的時候進(jìn)程已經(jīng)創(chuàng)建了兩個線程煌集,如果快速查看兩次,發(fā)現(xiàn)線程數(shù)據(jù)都是2捌省,但是隔一段時間后(超過10s)會發(fā)現(xiàn)線程數(shù)為3,到最后線程數(shù)為10碉钠,符合我們的預(yù)期纲缓。

結(jié)論


通過命令 "cat /proc/{pid}/status | grep Threads" 可以動態(tài)查看進(jìn)行運行時的線程個數(shù)。

One more thing...


如果你喜歡該文章喊废,歡迎關(guān)注我的微信公共賬號祝高,碼農(nóng)的荒島求生,獲取更多計算機(jī)內(nèi)功的知識污筷。

計算機(jī)內(nèi)功決定程序員職業(yè)生涯高度

碼農(nóng)的荒島求生
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末工闺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瓣蛀,更是在濱河造成了極大的恐慌陆蟆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惋增,死亡現(xiàn)場離奇詭異叠殷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诈皿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門林束,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稽亏,你說我怎么就攤上這事壶冒。” “怎么了截歉?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵胖腾,是天一觀的道長。 經(jīng)常有香客問我怎披,道長胸嘁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任凉逛,我火速辦了婚禮性宏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘状飞。我一直安慰自己毫胜,他們只是感情好书斜,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酵使,像睡著了一般荐吉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上口渔,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天样屠,我揣著相機(jī)與錄音,去河邊找鬼缺脉。 笑死痪欲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的攻礼。 我是一名探鬼主播业踢,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼礁扮!你這毒婦竟也來了知举?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤太伊,失蹤者是張志新(化名)和其女友劉穎雇锡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倦畅,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡遮糖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叠赐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欲账。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芭概,靈堂內(nèi)的尸體忽然破棺而出赛不,到底是詐尸還是另有隱情,我是刑警寧澤罢洲,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布踢故,位于F島的核電站,受9級特大地震影響惹苗,放射性物質(zhì)發(fā)生泄漏殿较。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一桩蓉、第九天 我趴在偏房一處隱蔽的房頂上張望淋纲。 院中可真熱鬧,春花似錦院究、人聲如沸洽瞬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伙窃。三九已至菩颖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間为障,已是汗流浹背晦闰。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留鳍怨,地道東北人鹅髓。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像京景,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骗奖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容