标签:
守护进程是一个后台程序,无需用户输入就能运行。经常用来提供某种服务。
不能控制终端,所以任何输入,输出,都需要做特殊处理。
解开守护进程的神秘性:
主要记住几条规则,而且知道几个函数,工作就简单了。
1 首先执行fork()后让父进程先退出。
和多数程序一样,一个守护进程是从shell脚本或者命令行启动的。--可以通过信号,脚本,shell命令,启动的。
守护进程跟应用程序不一样,应为他们不是交互式的---因为他们在后台而没有控制终端。
父进程在fork子进程后,退出后就消失了控制终端。
守护进程既不用从标准输入设备读信息,也不需要从标准输出设备,输出信息。
2 在子进程中调用setsid,取消进程和任何控制终端的关联。
3.下一步是让根目录成为子进程的当前工作目录。
因为任何进程如果,它的当前目录是在一个被安装的文件系统上,那么就会妨碍这个文件系统被卸载。
4.设置进程的umask为0 , 为了避免守护进程,继承的umask,收到创建文件和目录操作的干扰,这一步是必须的。
如果一个进程继承了父进程的umask 055 , 它屏蔽了group和other的读和执行权限,如果守护进程接着创建一个文件,那么group和other操作这个文件会带来麻烦。
守护进程umask设置为0避免了这种情况。当创建文件的时候给予守护进程更大的灵活性。
5.最后关闭子进程,继承的任何,不必要的文件描述符。
对于子进程来说,继承父进程打开的文件描述符是没意义的,浪费资源,具体关闭什么,根据情况,没有具体的说明。
创建守护进程步骤:
-在父进程中执行fork后,exit退出父进程。
- 在子进程中调用setsid
- 让根目录‘/’成为子进程的工作目录。
- 把子进程的umask设置为0.
- 关闭任何不需要的文件描述符。
标签:
原文地址:http://www.cnblogs.com/yuankaituo/p/4350296.html