我读到过 Linux 中的守护进程是双重分叉的结果。所有守护进程都是双重分叉的结果吗,还是有一些例外?
答案1
“守护进程”不是一种特殊的进程状态;它是一个描述性术语。任何完全不依赖终端或其他用户界面(即在后台运行)但以其他方式提供服务的进程都可以称为守护进程。
双分叉通常用作进程脱离终端并进入后台的机制(以及清除“父进程 ID”信息)。例如,如果您通过直接运行sudo ftpd
或apachectl start
在终端中启动服务,则这是必要的。
然而,不是当进程在正确的状态下启动时,它是必需的。大多数“服务管理器”(如 systemd 或 Upstart)的设计方式是,管理器本身和服务进程都不需要曾经以任何方式连接到终端或“前台”。每当您使用systemctl start
服务时,它从一开始就作为守护进程运行,从而使双重分叉变得多余。