首先,守护进程实在unix和Linux中后台运行的进程,它通常在系统引导的时候启动,系统关闭前结束
下面以Linux为例,描述一下创建一个简单的Linux守护进程的几个关键步骤:
- 调用fork()创建子进程。这使得父进程可以结束,这样新进程就不再是一个会话的领头进程,这是创建新会话的前提。
- 在子进程中调用setsid()创建新的会话,当前进程成为新会话的领头进程和新进程组的组长进程。同时让进程摆脱原会话,原进程组的控制。
- 调用fork()再次创建子进程,然后让第一子进程退出。这保证了该守护进程不是会话的领头进程,同时让它失去了在控制终端上打开文件的能力。
- 改变当前的工作目录。守护进程应该在文件系统的根目录下运行,以防止它们阻止文件系统被卸载。
- 重设文件权限掩码。将文件掩码设置为0确保守护进程具有最大的文件权限。
- 关闭所有打开的文件描述符。因为守护进程不应在终端上打开文件。
- 重定向标准输入、标准输出和错误输出流。因为守护进程和任何终端都不再关联,它们的标准输入、标准输出和标准错误(如果不关闭的话)也应该被重定向到/dev/null或者某个日志文件。