首页 文章

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

提问于
浏览
1

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

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

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

1 回答

  • 2

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

    您可以通过使用 init=/bin/sh 从GRUB直接启动到内核来进行测试

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

    你应该解释为什么要问这个问题 . 您是否有关于确定流程是否为deamon的问题?

相关问题