一、什么是守护进程
守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。
Linux 的大多数服务器就是用守护进程实现的。比如,Internet 服务器 inetd,Web 服务器 httpd 等。
二、如何查看守护进程
ps ajx
- a 表示不仅列当前用户的进程,也列出所有其他用户的进程;
- x 表示不仅列有控制终端的进程,也列出所有无控制终端的进程;
- j 表示列出与作业控制相关的信息
三、守护进程的特点
- 运行周期长
- 在后台运行,不需要与用户交互
四、编程流程
- fork复制子进程,退出父进程
- setsid()创建新会话——调用该方法的条件是,当前进程必须不能是组长进程
- fork退出父进程(即原子进程)
- 更改工作路径chdir(“\”)放到根目录下 “切换到不可能卸载的目录下”
- Umask(0);清除掩码
- Close();关闭描述符