如何在Linux内核中为守护进程分配pid(进程id)?

时间:2012-01-21 17:03:15

标签: linux linux-kernel

我研究了关于创建进程/线程的Linux内核代码(2.6.11),然后是do_fork() - > alloc_pidmap()

似乎alloc_pidmap总是返回pid>一旦前一个pid达到最大pid 300,而实际守护进程的pid总是< 300(这是正确的吗?)。

守护进程是否使用alloc_pidmap()以外的函数获取其pid?如果是这样,是否暗示守护进程不是使用do_fork创建的?

1 个答案:

答案 0 :(得分:2)

AFAIK pid由内核分配;您所看到的300(即#define RESERVED_PIDS 300私有内部kernel/pid.c)的限制可能是因为在大多数系统中,几个进程在引导程序的早期分叉(例如,可能来自initrd)。 / p>

您可以通过从GRUB直接启动到init=/bin/sh

的内核来进行测试

某些进程是内核进程(没有用户空间代码,例如kworkerkauditd),它们不是从init或后代通过fork启动的。它们可能是从内核中的kthread_create 开始的(并且没有任何系统调用)。

你应该解释为什么要问这个问题。你的问题是关于确定一个过程是否是一个守护神?