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

pho*_*xis 26 operating-system kernel process

我想知道kthread它是什么以及为什么它不占用任何内存并且没有打开的文件.我编写了一些代码,它们只是以父子树格式打印当前正在运行的进程的PID,以及一些其他信息,如使用过的VMZ,RSS,线程,openfiles.名为PID 2的所有子kthreadd节点在/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的子节点.

MSI*_*MSI 35

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

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

对于init的子进程,需要从init克隆,而Kthreads就不是这就是为什么他们的父PID为0意味着"没有人".

  • 谢谢你的回答,但是你可以给我一些文档的参考吗? (12认同)
  • “所有用户空间进程的 PID 通常都高于 1000,只有内核线程允许 PID 低于 1000。” – 这部分绝对是错误的,或者至少是今天:我在这里查看 PID874 `upowerd`、PID747 `accounts-daemon`、PID719 `gdm`。我怀疑这是预系统的民间传说,从当 init 进程涉及大量 shell 脚本时开始,它会消耗 PID < 1000,因此您不太可能在常规操作下看到它们(当然,直到 PID 空间环绕)。 (2认同)