- 调用fork(),创建新进程,它会是将来的守护进程.
- 调用setsid()创建新的会话区,让进程摆脱原会话的控制、让进程摆脱原进程组的控制和让进程摆脱原控制终端的控制。(如果不进行这步,孤儿进程将会在控制终端退出后退出)
- 将当前目录改成根目录(如果把当前目录作为守护进程的目录,当前目录不能被卸载他作为守护进程的工作目录)
- 将标准输入,标注输出,标准错误重定向到/dev/null.(否则会在控制终端中输出)
- 重设文件创建掩码,文件创建掩码是指屏蔽掉文件创建时的对应位。由于使用fork函数新建的子进程继承了父进程的文件创建掩码,这就给该子进程使用文件带来了诸多的麻烦。因此,把文件创建掩码设置为0,可以大大增强该守护进程的灵活性。设置文件创建掩码的函数是umask,通常的使用方法为umask(0)。
- 系统守护进程:syslogd、login、crond、at等。
- 网络守护进程:sendmail、httpd、xinetd、等。
- 独立启动的守护进程:httpd、named、xinetd等。
- 被动守护进程(由xinetd启动):telnet、finger、ktalk等。