[Linux] 认识系统服务(daemon)

news2024/9/25 9:34:18

参考:《鸟哥的Linux私房菜》 

一、什么是 daemon 与服务(service)

         在英语中的daemon就有守护进程,后台程序的意思。简单来说就是一直在后台运行的进程,我们就称之为服务(service),或者是守护进程(daemon)。这些进程常驻在内存当中,通常都是负责一些系统所提供的功能以服务用户的各项任务,故而需要在后台持续的运行。守护进程独立于控制终端运行,这意味着它们不需要用户的直接交互就可以执行其任务。

        那什么是后台,什么是前台呢?在任务管理(job control)中,可以出现提示字符并让你操作的环境就称为前台(foreground),至于其他任务就可以让你放入后台(background)去暂停或运行。

        系统为了某些功能必须要提供一些服务(不论是系统本身还是网络方面),这个服务就称为service。

        一般来说,daemon和service是一样的东西,我们不需要做区分。因为完成某个服务需要一个daemon在后台中运行,没有这个daemon就不会有service。

      守护进程通常在系统启动时由初始化系统启动,或者通过手工方式启动,并且它们会在整个操作系统运行期间持续运行,除非被显式停止。守护进程的主要目的是执行长期运行的任务,例如系统日志记录、打印队列管理、文件备份等。为了确保守护进程不会干扰用户的正常操作,它们会脱离终端和控制台,这意味着即使用户注销或关闭登录会话,守护进程也会继续运行。

        守护进程的设计遵循一些特定的原则来确保它们能够有效地独立运行。首先,一个典型的守护进程会在启动后成为其自己的会话领导者,并成为一个新的进程组的组长。这样做是为了避免进程被其父进程的挂起信号所影响。此外,守护进程通常会将其当前工作目录设置为根目录(/),以防止因为文件系统卸载而导致的问题。它们还会关闭所有不需要的文件描述符,包括标准输入、标准输出和标准错误,以减少资源占用并避免潜在的数据丢失。守护进程还会重定向这些文件描述符到/dev/null或适当的日志文件,以便可以记录输出信息而不干扰其他进程或用户。

        守护进程在Linux系统中的管理和监控通常是通过各种工具和技术实现的。例如,使用systemd或SysV init脚本来控制守护进程的启动、停止和重启。这些工具允许系统管理员通过命令行或配置文件来管理守护进程。此外,许多守护进程都会实现自我监控机制,当出现故障时能够自动重启,从而提高系统的可靠性和稳定性。

         daemon既然是一个程序执行后的进程,那么daemon所处的那个原本的程序通常是如何命名的呢?(daemon程序的命名方式)。每个服务的开发者,在开发他们的服务时,都有特别的故事。不过,无论如何,这些服务的名称被建立之后,在Linux中使用时,通常在服务的名称之后会加上一个d,例如计划任务命令建立的 at 与 cron 这两个服务,它的程序会被取为 atd 与 crond ,这个 d 代表的就是daemon的意思。所以当我们使用 ps 或 top 查看进程时,都会发现很多的 {xxx}d 的进程,通常那就是一些daemon的进程。

守护进程的特点:

  1. 后台运行:守护进程在后台运行,不与任何终端或控制台直接关联。
  2. 长期存活:守护进程的生命周期通常很长,通常在系统启动时开始运行,并一直运行到系统关闭或被显式停止。
  3. 资源管理:为了确保系统的稳定性和性能,守护进程通常会释放不需要的资源,比如关闭标准输入、输出和错误流,并将当前工作目录设置为根目录 /
  4. 权限管理:守护进程可能需要以root权限运行,以便能够使用特殊端口(通常是1-1024之间的端口)或访问某些特殊的系统资源。
  5. 服务提供:守护进程通常为用户提供某种服务,比如网络服务、打印服务、系统日志服务等。

1.1 init 与 systemd

        在早期的Linux系统中,初始化进程(init)是系统启动后第一个运行的进程,它的PID(进程标识号)总是1。init负责读取 /etc/inittab 文件中的配置信息,根据这个配置文件来启动不同的服务和进程。这个初始化进程及其配置文件定义了系统的运行级别、服务的启动顺序以及其他启动时的任务。

        随着时间的发展,随着计算机硬件和操作系统的复杂性增加,传统的init系统逐渐暴露出一些不足之处,例如启动速度较慢、依赖关系处理不够灵活等问题。因此,为了提高系统的启动速度和效率,以及更好地支持复杂的依赖关系,systemd 应运而生。

        systemd 是一种现代的初始化系统,它提供了一种更为高效的方式来管理服务和进程。相比于传统的init,systemd 提供了以下优点:

  • 并行启动systemd 可以并行启动多个服务,而不是按照严格的顺序逐个启动。
  • 依赖关系管理systemd 支持更复杂的依赖关系,可以根据服务之间的依赖关系动态地调整启动顺序。
  • 统一的接口systemd 提供了一套统一的命令和接口来管理服务,如 systemctl 命令。
  • 内存管理systemd 更好地管理内存资源,例如在需要时加载服务,减少不必要的内存占用。
  • 高级特性systemd 还支持诸如单元文件(unit files)管理、服务重启策略、日志记录等功能。

        由于 systemd 提供了更多的功能和更好的性能,大多数现代Linux发行版已经默认采用了 systemd 作为初始化系统。这意味着在这些系统中,传统的init系统已经被完全替代,用户和管理员现在使用 systemctl 和相关的 systemd 工具来管理服务和进程。

        从命名方式可以看出 systemd = system + d 组成,这个 d 代表的就是daemon的意思。

1.2 早期 System V 的 init 管理操作中 daemon 的主要分类(Optional)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2067654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java爬虫图像处理:从获取到解析

在互联网时代,数据的价值日益凸显,而爬虫技术作为获取网络数据的重要手段,其应用范围越来越广泛。本文将探讨Java爬虫在图像处理方面的应用,包括如何从网络中获取图像数据,以及如何对这些数据进行解析和处理。 Java爬…

实现Kruskal算法连通游戏地图地牢

前置知识 c分享|并查集从入门到出门 - 力扣(LeetCode) 彻底搞懂克鲁斯卡尔(Kruskal)算法(附C代码实现) - QuanHa - 博客园 (cnblogs.com) 白色点矩形是地牢,其中白线是按照krsukal…

网络编程知识点总结

物理链路网络运输会话表示应用 物链网运会表应 实际的数据帧 TCP和UDP的异同(笔试面试) 主机:host 转换:to 网络:network uint32_t htonl(uint32_t hostlong); //将4字节无符号整数的主机字节序转换为网络字节序&a…

云计算实训32——roles基本用法、使用剧本安装nginx、使用roles实现lnmp

一、安装nginx并更改其端口 编辑hosts配置文件 [rootmo ~]# vim /etc/ansible/hosts 创建目录 [rootmo ~]# mkdir /etc/ansible/playbook 编辑配置文件 [rootmo ~]# vim /etc/ansible/playbook/nginx.yml 执行测试 [rootmo ~]# ansible-playbook /etc/ansible/playbook/n…

菜鸟的进击之.net6控制台应用程序接收参数

1、新建控制台应用程序,新建-添加项目-控制台应用 2、3、下一步,填写项目名称和代码存放的位置 3、下一步,框架选择.net 6 ,点击创建 4、然后项目就创建完成啦, 5、在可以直接在Program.cs写方法一些简单的逻辑&#x…

Rustrover、IDEA 的 Rust 类型不显示(已解决)

关键词:rustrover 类型不显示,rustrover 不显示类型,IntelliJ IDEA Rust 类型不显示,IntelliJ IDEA Rust 不显示类型 若移动端访问不佳,请使用 –> Github版 背景 博主手欠,使用 IntelliJ IDEA 时&am…

四款流行英文翻译工具,助你轻松应对翻译难题

作为一名教培行业的工作人员,我经常需要处理大量的英文文件,从教材到学术论文,再到各种国际交流的资料。翻译工具成了我工作中不可或缺的帮手。今天,我就来跟大家聊聊我用过的几款翻译工具在翻译英文文件时的表现如何呢&#xff1…

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。

阿里提出UniPortrait,能根据用户提供的文本描述,快速生成既忠实于原图又能灵活调整的个性化人像,用户甚至可以通过简单的句子来描述多个不同的人物,而不需要一一指定每个人的位置。这种设计大大简化了用户的操作,提升了…

手机游玩植物大战僵尸杂交版V2.3.7最新版教程(文章末尾免费直接下载链接)

手机游玩植物大战僵尸杂交版V2.3.7最新版教程 【V2.3.7全面升级】植物大战僵尸杂交版:跨平台终极安装指南 - 苹果、安卓、电脑、电视兼容,界面革新,16卡槽扩展,高分辨率支持,BUG修复,畅享游戏乐趣 前言 …

市盈率的概念

写篇有关市盈率的【不务正业】的内容。 重要公式 市盈率 官方的定义 平均市盈率=∑(收盘价发行数量)/∑(每股收益发行数量),统计时剔除亏损及暂停上市的上市公司。 静态市盈率 滚动市盈率(TTM) 股票市盈率的意义 如果某股票有较…

探索数据结构:图(二)之图的遍历,Kruskal与Prim算法

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty’s blog 1. 图的遍历 图的遍历方式一般分为两种:深度优先遍历与广度…

gurobi中引入松弛变量和剩余变量的用法

文章目录 1. 松弛变量:用于“≤”不等式约束数学表达式 2. 剩余变量:用于“≥”不等式约束数学表达式 3. 目标函数中的松弛变量数学表达式 4. Gurobi中的实现对于“≤”不等式的松弛变量:对于“≥”不等式的剩余变量: 5. 总结 在G…

p2p、分布式,区块链笔记: IPFS库Helia的文件系统Unix File System (UnixFS)

Unix File System (UnixFS) Helia中定义一个UnixFS类用于文件处理。The Unix File System (UnixFS) is the data format used to represent files and all their links and metadata in IPFS.。UnixFS中的方法封装了常见的文件系统操作,使得在去中心化文件系统中处…

跨越时代的Zynq PL编程:从xdevcfg到FPGA Manager的进化

引言 在嵌入式系统设计与开发的广阔领域中,Xilinx Zynq平台以其独特的ARM处理器与FPGA可编程逻辑(PL)的结合,成为了众多创新项目的首选。然而,随着技术的不断进步,Zynq PL的编程方式也经历了从经典到现代的…

【UCB CS61C】Lecture 2 3 - C Basics

目录 C 语言的编译(Compilation)变量类型(Variable Types)字符(Characters) C 语言的类型转换(Typecasting)类型函数(Typed Functions) 结构体(St…

【C++ Primer Plus习题】3.6

问题: 解答: #include <iostream> using namespace std;int main() {float miles 0;float gallons 0;float gallon 0;cout << "请输入驱车里程(单位为英里):";cin >> miles;cout << "请输入使用的汽油量(单位为加仑):";cin &g…

【数据结构】一篇讲清楚什么是堆? 带图食用超详细~

目录 一、堆的概念 1.堆是一个完全二叉树 2.堆分为大根堆和小根堆。 3.堆与优先级队列的关系 二、堆操作 1.向下调整 2.删除堆顶元素 3.添加新元素 4.构建堆 A&#xff1a;自底向上构建 B&#xff1a;自顶向下构建 C&#xff1a;两种方式对比 三、尝试自己编程实现堆…

redis实战——go-redis的使用与redis基础数据类型的使用场景(二)

一.go-redis操作hash 常用命令&#xff1a; redisClient.HSet("map", "name", "jack") // 批量设置 redisClient.HMSet("map", map[string]interface{}{"a": "b", "c": "d", "e"…

基于springmvc实现文件上传

1.导入jar包 2.修改配置类 在springmvc.xml添加bean <!-- 配置文件上传处理器 --><bean id"multipartResolver" class"org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设置在内存中允许的最大文件大小&#x…

趣味算法------柠檬水摊

目录 题目概述&#xff1a; 解题思路&#xff1a; 具体代码&#xff1a; 总结&#xff1a; 题目概述&#xff1a; 在柠檬水摊上&#xff0c;每个柠檬水售价 5 元。客户正在排队向您购买&#xff0c;并且一次订购一份柠檬水。 每位顾客只会购买一份柠檬水&#xff0c;并支付 5…