以下是从给定进程创建守护进程的一些步骤,
给定的进程在分叉子进程后不久就存在,
孩子们打电话开始一个新的会话和一个新的组,通过
setsid()
但我似乎发现只有第一步而没有第二步的案例:
只有第一步而没有第二步的目的是什么?
它不想创建一个守护进程而是其他东西吗?
谢谢。
答案1
从高层次来看,其目的在您提供的 bash 示例中最为明显。当普通用户在交互式 bash shell 中输入 时ls
,会发生什么
- Bash 分叉
- 子进程执行
ls
- 当
ls
完成时,子进程结束
守护进程是愚蠢的ls
,因为(通常)它很快就结束了。
此外,奇怪的是所有从 shell 分叉出来的进程都会执行setuid()
.然后您将无法以普通用户身份运行 shell。
不要将守护进程的细节作为使用 fork/exec 的一般规则。