`

linux守护进程

 
阅读更多

http://www.cnblogs.com/xuxm2007/archive/2011/07/29/2121280.html

 

1.让init进程成为新产生进程的父进程:即fork并使父进程立即退出

2.调用setsid函数:使得新创建的进程脱离控制终端,同时创建新的进程组,并成为该进程组的首进程

    进程组、会话的概念。进程会被所在的进程组、会话(控制终端)影响。例如影响之一:在会话1中执行top &,之后在会话2是可以ps到的,但如果关闭会话1,则这个进程也会退出。

3.更改当前工作目录:

    使用fork函数产生的子进程将继承父进程的当前工作目录。当进程没有结束时,其工作目录是不能被卸载的。

    为了防止这种问题发生,守护进程一般会将其工作目录更改到根目录下(/目录)。更改工作目录使用的函数是chdir。

4.关闭文件描述符,并重定向标准输入、输出和错误输出

    守护进程是运行在系统后台的,不应该在终端有任何的输出信息。可以使用dup函数将标准输入、输出和错误输出重定向到/dev/null设备上

5. 设置守护进程的文件权限创建掩码

    很多情况下,守护进程会创建一些临时文件。出于安全性的考虑,往往不希望这些文件被别的用户查看。

    这时,可以使用umask函数修改文件权限,创建掩码的取值,以满足守护进程的要求。

 

daemon的作用就是:1、当参数nochdir为0时,将根目录修改为工作目录,2、noclose为0时,做输入,输出以及错误输出重定向到/dev/null

但是因为不同平台兼容性不好且功能有限,一般不直接使用,而是自己实现。例如redis中自己实现了daemonize()。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics