什么是kthreadd进程和子进程以及它与init和children有何不同

时间:2013-08-01 08:13:31

标签: process operating-system kernel

我想知道什么是kthread以及它为什么不占用任何内存并且没有打开文件。我编写了一些代码,它们只是以父子树格式打印当前正在运行的进程的PID,以及一些其他信息,如使用过的VMZ,RSS,线程,openfiles。名为kthreadd的PID 2的所有子节点在/proc/[pid]/status文件中没有VmSize和VmRSS。 /proc/[pid]/fd不包含任何打开的文件。

这些过程是什么,它们与init(PID 1)产生的正常过程有何不同。我读(在旧书中)交换器将生成init PID1,所有其他进程都是PID 1的子进程。当然,这背后有一个不同的架构(Linux内核3.7.10.1-16),我不知道,所以另一个问题是为什么PID 2是PID 0的子节点而不是PID 1的子节点。

1 个答案:

答案 0 :(得分:33)

内核线程不是init的子代,因为它们可以在所有用户空间进程之前启动。

它们通常用于管理硬件,这就是内核直接处理并具有高优先级的原因。

对于要成为init的子进程的进程,需要从init克隆并且Kthreads不是这就是为什么他们的父PID为0意味着“没有人”。