什么是 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。” – 这部分绝对是错误的,或者至少是今天:我在这里查看 PID874upowerd
、PID747 accounts-daemon
、PID719 gdm
。我怀疑这是系统前的民间传说,从 init 进程涉及大量 shell 脚本开始,这些脚本会消耗
以上是关于什么是 kthreadd 进程和子进程以及它与 init 和子进程有何不同的主要内容,如果未能解决你的问题,请参考以下文章