RHCSA 系列(五): RHEL7 中的进程管理:开机,关机

Gabriel Cánepa 的头像

·

·

·

8,004 次阅读

我们将概括和简要地复习从你按开机按钮来打开你的 RHEL 7 服务器到呈现出命令行界面的登录屏幕之间所发生的所有事情,以此来作为这篇文章的开始。

RHEL 7 开机过程

Linux 开机过程

请注意:

  1. 相同的基本原则也可以应用到其他的 Linux 发行版本中,但可能需要较小的更改,并且
  2. 下面的描述并不是旨在给出开机过程的一个详尽的解释,而只是介绍一些基础的东西

Linux 开机过程

  1. 初始化 POST(加电自检)并执行硬件检查;
  2. 当 POST 完成后,系统的控制权将移交给启动管理器的 第一阶段 first stage ,它存储在一个硬盘的引导扇区(对于使用 BIOS 和 MBR 的旧式的系统而言)或存储在一个专门的 (U)EFI 分区上。
  3. 启动管理器的第一阶段完成后,接着进入启动管理器的 第二阶段 second stage ,通常大多数使用的是 GRUB(GRand Unified Boot Loader 的简称),它驻留在 /boot 中,然后开始加载内核和驻留在 RAM 中的初始化文件系统(被称为 initramfs,它包含执行必要操作所需要的程序和二进制文件,以此来最终挂载真实的根文件系统)。
  4. 接着展示了 闪屏 splash 过后,呈现在我们眼前的是类似下图的画面,它允许我们选择一个操作系统和内核来启动:
RHEL 7 开机屏幕

启动菜单屏幕

  1. 内核会对接入到系统的硬件进行设置,当根文件系统被挂载后,接着便启动 PID 为 1 的进程,这个进程将开始初始化其他的进程并最终呈现给我们一个登录提示符界面。

注意:假如我们想在启动后查看这些信息,我们可以使用 dmesg 命令,并使用这个系列里的上一篇文章中介绍过的工具(注:即 grep)来过滤它的输出。

登录屏幕和进程的 PID

登录屏幕和进程的 PID

在上面的例子中,我们使用了大家熟知的 ps 命令来显示在系统启动过程中的一系列当前进程的信息,它们的父进程(或者换句话说,就是那个开启这些进程的进程)为 systemd(大多数现代的 Linux 发行版本已经切换到的系统和服务管理器):

# ps -o ppid,pid,uname,comm --ppid=1

记住 -o(为 -format 的简写)选项允许你以一个自定义的格式来显示 ps 的输出,以此来满足你的需求;这个自定义格式使用 man ps 里 STANDARD FORMAT SPECIFIERS 一节中的特定关键词。

另一个你想自定义 ps 的输出而不是使用其默认输出的情形是:当你需要找到引起 CPU 或内存消耗过多的那些进程,并按照下列方式来对它们进行排序时:

# ps aux --sort=+pcpu              # 以 %CPU 来排序(增序)
# ps aux --sort=-pcpu              # 以 %CPU 来排序(降序)
# ps aux --sort=+pmem              # 以 %MEM 来排序(增序)
# ps aux --sort=-pmem              # 以 %MEM 来排序(降序)
# ps aux --sort=+pcpu,-pmem        # 结合 %CPU (增序) 和 %MEM (降序)来排列
https://img.linux.net.cn/data/attachment/album/201509/18/143623k9xzqohboobbbhbv.png

自定义 ps 命令的输出

systemd 的一个介绍

在 Linux 世界中,很少有能比在主流的 Linux 发行版本中采用 systemd 引起更多的争论的决定。systemd 的倡导者根据以下事实来表明其主要的优势:

  1. 在系统启动期间,systemd 允许并发地启动更多的进程(相比于先前的 SysVinit,SysVinit 似乎总是表现得更慢,因为它一个接一个地启动进程,检查一个进程是否依赖于另一个进程,然后等待守护进程启动才可以启动的更多的服务),并且
  2. 在一个运行着的系统中,它用作一个动态的资源管理器。这样在启动期间,当一个服务被需要时,才启动它(以此来避免消耗系统资源)而不是在没有一个合理的原因的情况下启动额外的服务。
  3. 向后兼容 sysvinit 的脚本。

另外请阅读: ‘init’ 和 ‘systemd’ 背后的故事

systemd 由 systemctl 工具控制,假如你了解 SysVinit,你将会对以下的内容感到熟悉:

  • service 工具,在旧一点的系统中,它被用来管理 SysVinit 脚本,以及
  • chkconfig 工具,为系统服务升级和查询运行级别信息
  • shutdown 你一定使用过几次来重启或关闭一个运行的系统。

下面的表格展示了使用传统的工具和 systemctl 之间的相似之处:

旧式工具Systemctl 等价命令描述

via: http://www.tecmint.com/rhcsa-exam-boot-process-and-process-management/

作者:Gabriel Cánepa 译者:FSSlc 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

2 条回复

  1. netb2c [Chrome 45.0|GNU/Linux] 的头像
    netb2c [Chrome 45.0|GNU/Linux]

    又一个专题栏目了! :>

    来自郑州
  2. yutou83 [Internet Explorer 11.0|Windows 7] 的头像
    yutou83 [Internet Explorer 11.0|Windows 7]

    开机过程不是很详细, 比如stage1,stage2, 我在其他资料上看到还有个stage1.5

    来自中山

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注