1.守护进程

(1)守护进程简介

        守护进程,也就是我们通常所说的Daemon进程。它是一个生存期较长的进程,它通常独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。

        它与普通进程相比有下面这些特殊性:守护进程最重要的特性就是它在后台运行。其次它必须与运行前的环境隔离开来(因为守护进程应当不受用户、终端或其它变化而影响)。最后守护进程和普通进程的启动方式有所不同,它可以在系统启动时从启动脚本/etc/rc.d中启动,可以由作业归化进程crond启动,也可以由用户终端(通常是shell)执行。

(2)创建守护进程

        创建子进程,父进程退出。完成这一过程后,将在shell终端里造成一程序运行完毕的假象,之后所有的工作都在子进程里完成。而用户可以再终端里执行其它的命令,从而在形式上做到了与控制终端的隔离。如下:

if(pid=fork())

exit(0);//是父进程,结束父进程,子进程继续。

        setsid函数。了解一下进程组与会话周期的概念。创建守护进程为什么要用setsid函数?第一步中调用了fork函数创建子进程,再将父进程退出。但子进程从父进程那里继承来了会话期、进程组、控制终端等,因此并没有真正意义上独立开来。而setsid函数可以使进程完全独立开来,从而摆脱其它进程的控制。

        关闭打开的文件描述符。fork函数创建的子进程会从父进程那里继承一些一些已经打开的文件描述符,但这些文件可能永远不会被读写,为了避免资源浪费,要关闭文件描述符。通常按照如下方式关闭文件描述符。

for(i=0;i<MAXFILE;i++)

close(i);

        改变当前目录为根目录。使用fork函数创建的子进程继承了父进程的工作目录。为了工作方便,通常把工作目录切换成“/”。具体做法用函数chdir函数。

 

2.