守护进程

守护进程是一个后台程序,无需用户输入就能运行。经常用来提供某种服务。

不能控制终端,所以任何输入,输出,都需要做特殊处理。

解开守护进程的神秘性:

主要记住几条规则,而且知道几个函数,工作就简单了。

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.

  - 关闭任何不需要的文件描述符。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。