【问题标题】:What is kthreadd process and children and how it is different from init and children什么是 kthreadd 进程和子进程以及它与 init 和子进程有何不同
【发布时间】:2013-08-02 01:11:30
【问题描述】:

我想知道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 的子代。

【问题讨论】:

标签: process operating-system kernel


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答,但您能给我一些文档的参考吗?
  • “所有用户空间进程的 PID 通常都高于 1000,只有内核线程允许 PID 低于 1000。” – 这部分绝对是错误的,或者至少是今天:我在这里查看 PID874 upowerd、PID747 accounts-daemon、PID719 gdm。我怀疑这是系统前的民间传说,从 init 进程涉及大量 shell 脚本开始,这些脚本会消耗
猜你喜欢
  • 2023-03-10
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2013-08-11
相关资源
最近更新 更多