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

Posted

技术标签:

【中文标题】什么是 kthreadd 进程和子进程以及它与 init 和子进程有何不同【英文标题】:What is kthreadd process and children and how it is different from init and children 【发布时间】: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 的子代。

【问题讨论】:

我想这可能对你有帮助....unix.stackexchange.com/questions/13290/… this answer in unix.stackexchange 没有详细回答。我需要更详细的信息。 【参考方案1】:

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

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

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

【讨论】:

感谢您的回答,但您能给我一些文档的参考吗? “所有用户空间进程的 PID 通常都高于 1000,只有内核线程允许 PID 低于 1000。” – 这部分绝对是错误的,或者至少是今天:我在这里查看 PID874 upowerd、PID747 accounts-daemon、PID719 gdm。我怀疑这是系统前的民间传说,从 init 进程涉及大量 shell 脚本开始,这些脚本会消耗

以上是关于什么是 kthreadd 进程和子进程以及它与 init 和子进程有何不同的主要内容,如果未能解决你的问题,请参考以下文章

Linux下2号进程的kthreadd--Linux进程的管理与调度

什么是父进程和子进程?

使用来自 Python 的 7-zip cmd 行和子进程

Python中主进程和子进程之间的动态通信

如何让父进程和子进程相互监听?

多进程和子进程有啥区别?