成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

linux查詢進程有幾種方式 linuxtop查看的是進程還是線程?

linuxtop查看的是進程還是線程?top命令的每一行顯示一個進程,后綴-H(ThrLinux是如何記錄進程資源的?你能從C語言源代碼層面分析下嗎?謝謝邀請我。其實簡單來說,一個進程無非就是正在運行

linuxtop查看的是進程還是線程?

top命令的每一行顯示一個進程,后綴-H(Thr

Linux是如何記錄進程資源的?你能從C語言源代碼層面分析下嗎?

謝謝邀請我。

其實簡單來說,一個進程無非就是正在運行的程序及其相關資源的總和。讀者應該注意單詞 "相關資源 "給你。Linux如何在內核中記錄進程的資源?

Linux內核如何記錄一個進程的資源?首先我們要明白,Linux內核大部分都是用C語言編寫的,所以要搞清楚內核是如何記錄進程資源的,我們只需要看看相關的C語言代碼就可以了。事實上,Linux內核使用task_struct結構來描述進程的資源。它的C語言代碼如下。請看:

Task_struct結構很長,占了我手里Linux內核C語言源代碼的280行。當然還有很多有條件的編譯部分。在32位的機器上,task_struct大約占用1.7kB的內存空間,但考慮到它可以管理一個完整的進程,1.7 KB并不算大。

鑒于task_struct的結構比較長,這里不可能把它的成員介紹清楚。如果讀者和我一樣好奇,粗略瀏覽一下task_struct結構,應該能找到一些熟悉的成員,比如:

通過C語言中的注釋和成員的變量名可以看到,task_struct結構中包含了文件系統(tǒng)、線程結構、進程打開的文件等信息,與上一篇文章的內容相對應。其他成員會在我后面的文章中涉及,所以我贏了 這里暫時不細說。

Linux在創(chuàng)建進程時,通過slab分配器分配task_struct結構,可以避免動態(tài)分配和釋放帶來的開銷,提高內存使用效率。

那么在task_struct結構創(chuàng)建之后,內核是如何訪問它的呢?根據(jù)我手里的內核C語言源代碼,Linux中還有一個結構thread_info,它的一個成員任務指針正好適合索引task_struct結構。在X86_64平臺上,thread_info的相關C語言代碼如下。請看:Linux通常把thread_info結構放在內核棧的底部或頂部,內核棧的大小通常是已知的,所以每個進程都可以很容易地從自己的棧中找到thread_info結構,然后找到task_struct結構。

要找到當前進程的thread_info結構,可以調用current_thread_info()函數(shù),其C語言代碼如下,請看:

可以看出,current_thread_info()函數(shù)實際上是通過進程棧來計算的,所以它的實現(xiàn)與平臺架構有關。上面的C語言代碼其實只是arm平臺的實現(xiàn)方法,讀者可以自己查看其他平臺的實現(xiàn)方法。

此時,要獲取當前進程的資源,可以使用current_thread_info()-gttask索引。

歡迎在評論區(qū)一起討論提問。這些文章都是手工原創(chuàng)的。每天都有最簡單的C語言、linux等嵌入式開發(fā)介紹。如果你喜歡我的文章,請關注一波。你可以看到最新的更新和以前的文章。