为什么有些程序的进程在分叉子进程后仍然存在,而子进程没有启动新的进程会话?

为什么有些程序的进程在分叉子进程后仍然存在,而子进程没有启动新的进程会话?

以下是从给定进程创建守护进程的一些步骤,

  • 给定的进程在分叉子进程后不久就存在,

  • 孩子们打电话开始一个新的会话和一个新的组,通过setsid()

但我似乎发现只有第一步而没有第二步的案例:

只有第一步而没有第二步的目的是什么?

它不想创建一个守护进程而是其他东西吗?

谢谢。

答案1

从高层次来看,其目的在您提供的 bash 示例中最为明显。当普通用户在交互式 bash shell 中输入 时ls,会发生什么

  • Bash 分叉
  • 子进程执行ls
  • ls完成时,子进程结束

守护进程是愚蠢的ls,因为(通常)它很快就结束了。

此外,奇怪的是所有从 shell 分叉出来的进程都会执行setuid().然后您将无法以普通用户身份运行 shell。

不要将守护进程的细节作为使用 fork/exec 的一般规则。

相关内容