2013-08-01 134 views
15

我想知道什麼是kthread以及爲什麼它不佔用任何內存並且沒有打開的文件。我編寫了一些代碼,它將簡單地以父子樹格式打印當前正在運行的進程的PID,以及一些附加信息,如使用的VMZ,RSS,線程,openfiles。名爲kthreadd的PID 2的所有孩子都沒有/proc/[pid]/status文件中的VmSize和VmRSS。 /proc/[pid]/fd沒有包含任何打開的文件。什麼是kthreadd進程和子進程以及它如何與初始進程和子進程有所不同

什麼是這些進程,它們與init(PID 1)產生的正常進程有何不同。我讀過(在一本舊書中),交換器會產生初始化PID1,而所有其他進程都是PID 1的子進程。當然,我不知道這個背後有一個不同的體系結構(Linux內核3.7.10.1-16),所以另一個問題是爲什麼PID 2是PID 0的孩子,而不是PID 1的孩子。

+0

我想這可能會幫助你.... 的http:// UNIX。 stackexchange.com/questions/13290/init-process-ancestor-of-all-processes – Rex

+0

unix.stackexchange中的這個答案沒有詳細回答。我需要更詳細的信息。 – phoxis

回答

17

內核線程不是init子項,因爲它們可以在所有用戶空間進程之前啓動。

它們通常用於管理硬件,這是它們直接由內核處理並具有高優先級的原因。

對於一個進程是init的子進程,它需要從init克隆,Kthreads不是這就是爲什麼他們的父PID是0意味着「沒有人」。

所有用戶空間的進程具有典型的是PID優於1000,只有內核線程允許有PID遜色於1000

+7

感謝您的回答,但您能否給我一些參考資料? – phoxis