守护进程是指:(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等
特性:
守护进程最重要的特性是后台运行,它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端 (通常是shell)执行。
1.在后台运行,父进程退出,子进程继续(fork())
2.脱离控制终端,使进程程成为会话组长( 调用setsid() )
setsid();
说明:当进程是会话组长时setsid()调用失败。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
3.关闭打开的文件描述副
进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们: 关闭打开的文件描述符。
4.改变当前工作目录( chdir() )
进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如/tmp
5.设置umask值。
进程从创建它的父进程那里继承了文件创建权限,它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件umask清除:umask(0);