我研究了关于创建进程/线程的Linux内核代码(2.6.11),并遵循了do_fork()->alloc_pidmap()
当之前的pid达到最大pid时,alloc_pidmap似乎总是返回pid > 300,而实际上守护进程的pid总是小于300 (这是正确的吗?)。
守护进程是否使用alloc_pidmap()以外的函数获取其pid?如果是,这是否意味着守护进程不是使用do_fork创建的?
发布于 2012-01-22 01:09:47
AFAIK pid是由内核分配的;您看到的300的限制(例如,kernel/pid.c中的#define RESERVED_PIDS 300私有)可能是因为在大多数系统上,在引导的早期已经派生了几个进程(例如,可能来自initrd )。
您可以通过使用init=/bin/sh从GRUB直接引导到内核来进行测试
一些进程是内核进程(没有用户代码,例如kworker或kauditd),它们不是由来自初始化或子代的分支启动的。它们可能是从内核内部的kthread_create开始的(没有任何系统调用)。
你应该解释一下你为什么问这个问题。你的问题是关于确定进程是否是守护进程?
https://stackoverflow.com/questions/8954846
复制相似问题