守护进程努力工作,因此您不必这样做。
想象一下,你正在写一篇文章、网页或一本书,你的意图就是这样做——写。 不必手动启动打印机和网络服务,然后整天监控它们以确保它们正常工作,这真是太好了。
我们可以为此感谢守护进程——他们为我们做这样的工作。
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 经常看到三叉戟,它象征着守护进程的进程分叉。