45

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

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

4

1 回答 1

53

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

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

对于要成为 init 子进程的进程,它需要从 init 克隆,而 Kthreads 不是这就是为什么它们的父 PID 为 0 表示“无人”。

于 2014-01-24T18:46:07.363 回答