Linux 术语克星:Linux 中的守护进程是什么?

守护进程努力工作,因此您不必这样做。

想象一下,你正在写一篇文章、网页或一本书,你的意图就是这样做——写。 不必手动启动打印机和网络服务,然后整天监控它们以确保它们正常工作,这真是太好了。

我们可以为此感谢守护进程——他们为我们做这样的工作。

Linux 中的守护进程是什么?

守护进程(通常发音为: day-mon,但有时发音为押韵 diamond) 是一个具有独特目的的程序。 它们是在后台静默运行的实用程序,用于监视和管理某些子系统,以确保操作系统正常运行。 打印机守护进程监视并处理打印服务。 网络守护进程监视和维护网络通信等。

讲完了daemon的读音,我再补充一点,如果你想把它读成demon,我不会抱怨的。

对于那些从 Windows 世界来到 Linux 的人来说,守护进程被称为服务。 对于 Mac 用户,术语服务有不同的用法。 Mac 的操作系统实际上是 UNIX,因此它使用守护程序。 术语服务被使用,但仅用于标记下发现的软件 Services 菜单。

守护进程在预定义的时间或响应某些事件执行某些操作。 有许多守护进程运行在 Linux 系统上,每个守护进程专门设计用于监视自己的一小部分系统,并且由于它们不受用户的直接控制,因此它们实际上是不可见的,但必不可少。 因为守护进程在后台完成大部分工作,所以它们可能看起来有点神秘,因此,可能难以识别它们以及它们实际做什么。

您的机器上正在运行哪些守护进程?

要识别守护进程,请查找以字母 d 结尾的进程。 守护进程的名称以这种方式结尾是 Linux 的一般规则。

有很多方法可以瞥见正在运行的守护进程。 它们可以通过以下方式在流程列表中看到 ps, top, 或者 htop. 这些程序本身就是有用的——它们有特定的用途,但是要查看您机器上运行的所有守护程序, pstree 命令将更适合我们的讨论。

pstree command 是一个方便的小实用程序,它显示您系统上当前运行的进程,并以树形图显示它们。 打开终端并输入以下命令:

pstree

您将看到所有正在运行的进程的完整列表。 您可能不知道它们中的一些是什么,或者它们做什么,它们被列出。 这 pstree 输出很好地说明了您的机器正在发生的事情。 有很多事情要发生!

查看屏幕截图,可以在这里看到一些守护进程: 硬盘驱动器, 虚拟机, 系统, 登录 和其他一些。

我们的进程列表足够长,列表无法在单个终端窗口中显示,但我们可以使用鼠标或光标键向上滚动:

生成守护进程

同样,守护进程是在后台运行的进程,通常不受用户控制。 据说守护进程没有控制终端。

进程是一个正在运行的程序。 在特定的时刻,它可以是正在运行、正在休眠或处于僵尸状态(完成其任务,但等待其父进程接受返回值的进程)。

在 Linux 中,存在三种类型的进程:交互式、批处理和守护进程。

交互式进程是那些由用户在命令行运行的进程称为交互式进程。

批处理是不与命令行关联的进程,并从进程列表中显示出来。 将这些视为“任务组”。 这些在系统使用率低的时候是最好的。 例如,系统备份通常在晚上运行,因为白天工作人员不使用系统。 当我是一名全职系统管理员时,我经常在晚上运行磁盘使用情况盘点、系统行为分析脚本等等。

交互式进程和批处理作业不是守护进程,即使它们可以在后台运行并且可以进行一些监视工作。 他们的关键是这两种类型的过程涉及通过某种终端控制的人工输入。 守护进程不需要人来启动它们。

我们知道守护进程是作为后台进程运行的计算机程序,而不是在交互式用户的直接控制下。 系统启动完成后,系统初始化过程开始通过称为 forking 的方法生成(创建)守护进程,从而无需终端(这就是无控制终端的意思)。

我不会详细介绍进程分叉的全部细节,但希望我能简短地展示一些背景信息来描述已完成的工作。 虽然还有其他方法可以创建进程,但传统上,在 Linux 中,创建进程的方法是通过复制现有进程以创建子进程。 然后执行一个 exec 系统调用来启动另一个程序。

顺便说一下,fork 这个词不是任意的。 它的名字来自 C 编程语言。 C 使用的库之一称为标准库,包含执行操作服务的方法。 其中一种方法称为 fork,专门用于创建新进程。 发起fork的进程被认为是新创建的子进程的父进程。

创建守护进程的过程是初始化(称为 init) 通过 fork 自己的进程来创建新进程。 这样做了, init 进程是完全的父进程。

还有另一种产生守护进程的方法,那就是让另一个进程派生一个子进程然后死掉(这个术语经常用来代替退出)。 当父进程死亡时,子进程成为孤儿。 当一个子进程成为孤儿时,它会被 init 过程。

如果您无意中听到有关“父进程 ID 为 1”的守护进程的讨论或阅读在线材料,这就是原因。 有些守护进程不是在启动时生成的,而是由另一个死掉的进程稍后创建的,并且 init 采纳了它。

不要将其与僵尸混淆,这一点很重要。 请记住,僵尸进程是已完成其任务并等待父进程接受退出状态的子进程。

Linux 守护进程示例

同样,识别 Linux 守护进程的最常见方法是查找以字母 d 结尾的服务。 以下是一些可能在您的系统上运行的守护进程示例。 您将能够看到守护进程被创建来执行一组特定的任务:

systemd – 这个守护进程的主要目的是统一 Linux 发行版中的服务配置和行为。

rsyslogd – 用于记录系统消息。 这是一个较新的版本 syslogd 有几个附加功能。 它支持登录本地系统以及远程系统。

udisksd – 处理查询、挂载、卸载、格式化或分离存储设备(如硬盘或 U 盘)等操作

logind – 一个微小的守护进程,以各种方式管理用户登录和席位

httpd – HTTP 服务管理器。 这通常与 Web 服务器软件一起运行,例如 Apache.

sshd – Daemon 负责管理 SSH 服务。 这几乎用于任何接受 SSH 连接的服务器。

ftpd – 管理 FTP 服务 – FTP 或文件传输协议是计算机之间传输文件的常用协议; 一个充当客户端,另一个充当服务器。

crond – 用于基于时间的操作(例如软件更新或系统检查)的调度程序守护程序。

守护进程这个词的由来是什么?

当我第一次开始写这篇文章时,我计划只讨论守护进程是什么,然后就离开它。 在 Linux 出现之前,我使用 UNIX。 那时,我想到了守护进程:一个执行系统任务的后台进程。 我真的不在乎它是怎么得名的。 随着其他事情的额外讨论,比如僵尸和孤儿,我只是认为操作系统的创造者有一种扭曲的幽默感(很像我自己的)。

我总是对我写的每一篇文章进行一些研究,我很惊讶地发现,显然,很多其他人确实想知道这个词是怎么来的以及为什么。

这个词确实引起了一些好奇,在阅读了几次热烈的交流后,我承认我也很好奇。 搜索单词的含义或词源(单词的起源),您会找到几个答案。

为了参与讨论,这是我的看法。

daemon 这个词的最早形式被拼写为 daimon,一种守护天使的形式 – 伴随着精神,帮助形成了他们所帮助的人的性格。 苏格拉底声称有一个以有限的方式为他服务,但正确的。 苏格拉底的守护神只告诉他什么时候闭嘴。 苏格拉底在公元前 399 年的审判中描述了他的守护程序,因此对守护程序的信仰已经存在了很长一段时间。 有时,daimon 的拼写显示为 daemon。 在这里,Daimon 和 daemon 是同一个意思。

恶魔是随从,而恶魔是圣经中的邪恶角色。 拼写的差异是故意的,显然是在 16 世纪决定的。 恶魔是好人,恶魔是坏人。

1963 年,在计算中使用守护进程这个词。 MAC项目 是数学与计算项目的简写,由麻省理工学院创建。 正是在这里,守护进程这个词, 开始普遍使用 表示监视其他任务并根据其行为执行预定操作的任何系统进程,守护进程这个词的命名是 麦克斯韦守护进程.

Maxwell 的守护进程是思想实验的结果。 1871 年, 詹姆斯·克拉克·麦克斯韦 想象一个聪明而足智多谋的人,能够观察和引导单个分子在特定方向上的运动。 思考练习的目的是展示与热力学第二定律相矛盾的可能性。

我确实看到一些评论说守护进程这个词是 Disk And Executive MONitor. 这个词的原始用户,守护进程, 从未将其用于该目的,所以我认为首字母缩略词的想法是不正确的。

最后——以一个轻松的音符结束——有 BSD 吉祥物:一个具有恶魔外观的守护进程。 BSD 守护进程以软件守护进程的名字命名,但通过玩弄这个词来获得外观。

守护进程的名字是野兽。 我还没有完全(还)对此进行研究,但我确实发现了一条评论,指出 Beastie 来自对字母的含糊不清,BSD。 尝试一下; 我做到了。 尽可能快地说出字母,然后发出非常像野兽的声音。

Beastie 经常看到三叉戟,它象征着守护进程的进程分叉。