守护进程

旋风式介绍

守护进程(daemon)是没有终端的,不依赖于终端的程序。

作为系统中的一个后台进程。周期性的执行某些任务,或者等待某个事件的发生。不会随用户注销而退出。

创建守护进程:不能是组长进程。

通过fork子进程,令父进程结束,

子进程setid()创建新会话,脱离控制终端。

具体如下:

转载自:

作者:一语穿心

链接:https://www.zhihu.com/question/38609004/answer/77190522

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。(2)(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断信号),不应对以前从该终端上启动的任何守护进程造成影响。要注意守护进程与后台运行程序(即加&启动的程序)的区别。

创建守护进程的过程:

  1. 调用fork创建子进程。父进程终止,让子进程在后台继续执行。
  2. 子进程调用setsid产生新会话期并失去控制终端调用setsid()使子进程进程成为新会话组长和新的进程组长,同时失去控制终端。
  3. 忽略SIGHUP信号。会话组长进程终止会向其他进程发该信号,造成其他进程终止。
  4. 调用fork再创建子进程。子进程终止,子子进程继续执行,由于子子进程不再是会话组长,从而禁止进程重新打开控制终端。
  5. 改变当前工作目录为根目录。一般将工作目录改变到根目录,这样进程的启动目录也可以被卸掉。
  6. 关闭打开的文件描述符,打开一个空设备,并复制到标准输出和标准错误上。 避免调用的一些库函数依然向屏幕输出信息。
  7. 重设文件创建掩码清除从父进程那里继承来的文件创建掩码,设为0。
  8. 用openlog函数建立与syslogd的连接。

本文标题:守护进程

文章作者:Yang Shuai

发布时间:2019年03月12日 - 17:03

最后更新:2019年03月12日 - 20:03

原始链接:https://ysbbswork.github.io/2019/03/12/守护进程/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!