我研究了关于创建进程/线程的Linux内核代码(2.6.11),并遵循do_fork()->alloc_pidmap()
当前一个pid达到最大pid时,alloc_pidmap似乎总是返回pid>300,而实际上守护进程的pid总是守护进程是否使用alloc_pidmap()以外的函数获取其pid?如果是,是否意味着守护进程不是使用do_fork创建的?
最佳答案
afaik pid是由内核分配的;您看到的300的限制(即#define RESERVED_PIDS 300
private insidekernel/pid.c
)可能是因为在大多数系统上,在引导的早期已经有几个进程被分叉(例如frominitrd
可能)。
您可以通过从grub直接引导到init=/bin/sh
的内核来进行测试。
有些进程是内核进程(没有userland代码,例如kworker
或kauditd
),它们不是由来自init或后代的fork启动的。它们可能在内核中以kthread_create
开头(并且没有任何系统调用)。
你应该解释你为什么这么问。你的问题是确定一个过程是不是一个执事?
关于linux - 如何在Linux内核中为守护进程分配pid(进程ID)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8954846/