Linux 守护进程原理和创建

Posted by KalosAner on February 5, 2025

一、引言

定义与特性

守护进程也就是通常说的 Daemon 进程,守护进程会不断地运行提供服务,类似于 Windows 上的系统服务。它有以下特性:

独立运行:启动后常驻内存,不受终端控制。

独立于用户:通常由 root 用户运行,不受普通用户影响。

提供服务:守护进程通常会持续提供服务,如监控端口。

通常由系统启动:系统启动时通常会启动所有的守护进程。

生命周期:常常在系统启动时就开始运行,直到系统关闭时才终止。

守护进程是一种特殊进程,它可以由普通进程按照上述特性改造成守护进程。在终端中输入 ps axj a 可以查看守护进程。

通过阅读创建守护进程的源码可能更能体会守护进程的特性。

常见的守护进程

sshd:SSH 服务器守护进程,监控 22 端口,提供远程登录服务。

cron:定时任务调度守护进程。

systemd-journald:管理日志的守护进程。

nginxhttpd:Web 服务器守护进程。

特殊的守护进程

有一个特殊守护进程称作超级守护进程,指在操作系统中,由一个统一的守护进程(如 xinetd)负责管理和调度其他网络服务的机制。这种设计旨在减少系统资源占用,提高管理效率。

它有以下特性:

统一监听:超级守护进程在系统启动时运行,统一监听多个服务端口。

按需启动:当某个端口收到请求时,超级守护进程根据配置,启动相应的服务进程来处理该请求。

资源优化:最初只有超级守护进程占有系统资源,未被请求的服务不会占用系统资源,只有在需要时才启动,降低了系统开销。

xinetd 是典型的超级守护进程,但在现代 Linux 系统中,systemd 已逐渐取代 xinetd,成为新的系统和服务管理器,但 xinetd 仍在某些场景下被广泛使用。

平时在安装 dockersshmysql等软件时都需要启动一个服务对相应的端口进行监测,使用的就是 systemd 对这些服务进行管理,例如:systemctl start docker

普通的守护进程也可以使用超级守护进程来启动,如:systemctl start mydaemon

二、前置知识

在制作守护进程之前需要了解会话、进程组和控制终端的概念。