我研究了关于创建进程/线程的Linux内核代码(2.6.11),然后是do_fork() - > alloc_pidmap()
似乎alloc_pidmap总是返回pid>一旦前一个pid达到最大pid 300,而实际守护进程的pid总是< 300(这是正确的吗?)。
守护进程是否使用alloc_pidmap()以外的函数获取其pid?如果是这样,是否暗示守护进程不是使用do_fork创建的?
答案 0 :(得分:2)
AFAIK pid由内核分配;您所看到的300(即#define RESERVED_PIDS 300
私有内部kernel/pid.c
)的限制可能是因为在大多数系统中,几个进程在引导程序的早期分叉(例如,可能来自initrd
)。 / p>
您可以通过从GRUB直接启动到init=/bin/sh
某些进程是内核进程(没有用户空间代码,例如kworker
或kauditd
),它们不是从init或后代通过fork启动的。它们可能是从内核中的kthread_create
开始的(并且没有任何系统调用)。
你应该解释为什么要问这个问题。你的问题是关于确定一个过程是否是一个守护神?