2013-08-01 100 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