目录

一、守护进程

1.1 简介

1.2 特点总结

二、进程组和会话

2.1 进程组

2.2 会话

2.3 可以使用 ps ajx 来查看进程组 ID 和会话 ID

2.4 进程组和会话的关系图

三、创建守护进程模型

3.1 流程

3.2 代码


一、守护进程

1.1 简介

Daemon(精灵)进程,是 Linux 中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以 d 结尾的名字,如 ysftpd

Linux 后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp 服务器;nfs 服务器等

1.2 特点总结

Linux 后台服务进程

独立于控制终端

周期性的执行某种任务

不受用户登陆和注销的影响

般采用以 d 结尾的名字

二、进程组和会话

2.1 进程组

1、进程组是一个或者多个进程的集合,每个进程都属于一个进程组,引入进程组是为了简化对进程的管理。当父进程创建子进程的时候,默认子进程与父进程属于同一个进程组。

2、进程组 ID == 第一个进程 ID(组长进程)。如父进程创建了多个子进程,父进程和多个子进程同属于一个组,而由于父进程是进程组里的第一个进程,所以父进程就是这个组的组长,组长 ID == 父进程 ID

3、可以使用 kill -SIGKILL -进程组 ID(负的)来将整个进程组内的进程全部杀死

4、只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关

5、进程组生存期:从进程组创建到最后一个进程离开

2.2 会话

1、一个会话是一个或多个进程组的集合

2、创建会话的进程不能是进程组组长

3、创建会话的进程成为一个进程组的组长进程,同时也成为会话的会长

4、需要有 root 权限(ubuntu 不需要)

5、新创建的会话丢弃原有的控制终端

6、建立新会话时,先调用 fork,父进程终止,子进程调用 setsid 函数

2.3 可以使用 ps ajx 来查看进程组 ID 和会话 ID

可以 fork 出几个子进程,然后查看进程组 ID 和会话 ID

2.4 进程组和会话的关系图

centos 什么是守护进程_linux

 

三、创建守护进程模型

3.1 流程

1、创建子进程,父进程退出

所有工作在子进程中进行形式上脱离了控制终端

2、在子进程中 创建新会话

setsid() 函数

使子进程完全独立出来,脱离控制

3、改变当前目录为根目录

chdir() 函数

防止占用可卸载的文件系统

也可以换成其它路径

4、重设文件权限掩码

umask() 函数

防止继承的文件创建屏蔽字拒绝某些权限

增加守护进程灵活性

5、关闭文件描述符

继承的打开文件不会用到,浪费系统资源,无法卸载

6、开始执行守护进程核心工作守护进程退出处理程序模型

3.2 代码

centos 什么是守护进程_centos 什么是守护进程_02

centos 什么是守护进程_进程组_03

centos 什么是守护进程_进程组_04

 

centos 什么是守护进程_centos 什么是守护进程_05

兄弟们,我电脑崩了,大家不要轻易尝试。老师电脑挂起重新启动后进程还在

centos 什么是守护进程_centos 什么是守护进程_06