Linux 及其它类 Unix 系统的系统服务管理和控制程序(初始化系统/init system)简单梳理

文章目录

  • 一、Linux 的启动过程
  • 二、初始化程序
    • (一)System V init
    • (二)Upstart init
    • (三)systemd
    • (四)Launchd
    • (五)Epoch
    • (六)Mudar

一、Linux 的启动过程

在我们打开 Linux 电脑的电源后第一个启动的进程就是 init。分配给 init 进程的 PID 是1。它是系统其他所有进程的父守护进程。 init 进程在 Start_kernel 执行完毕之后,也就是 Kernel 初始化完毕之后启 动,它是系统所有进程的起点,内核在完成核内引导以后,即在本进程空间内加载 init 程序。

当一台Linux电脑启动后,处理器会先在系统存储中查找BIOS,之后BIOS会检测系统资源然后找到第一个引导设备,通常为硬盘,然后会查找硬盘的主引导记录(MBR),然后加载到内存中并把控制权交给它,以后的启动过程就由MBR控制。

主引导记录会初始化引导程序(Linux上有两个著名的引导程序,GRUB和LILO,80%的Linux系统在用GRUB引导程序),这个时候GRUB或LILO会加载内核模块。内核会马上查找/sbin下的“init”程序并执行它。从这里开始init成为了Linux系统的父进程。init读取的第一个文件是 /etc/inittab,通过它init会确定我们Linux操作系统的运行级别。它会从文件 /etc/fstab 里查找分区表信息然后做相应的挂载。然后init 会启动 /etc/init.d 或者 /etc/rc.d/init.d 里指定的默认启动级别的所有服务/脚本。所有服务在这里通过init一个一个被初始化。在这个过程里,init每次只启动一个服务(串行启动),所有服务/守护进程都在后台执行并由init来管理。

关机过程差不多是相反的过程,首先init停止所有服务,最后阶段会卸载文件系统。

以上提到的启动过程有一些不足的地方。而用一种更好的方式来替代传统init的需求已经存在很长时间了。也产生了许多替代方案。其中比较著名的有Upstart,Epoch,Muda和Systemd。而Systemd获得最多关注并被认为是目前最佳的方案。

二、初始化程序

(一)System V init

System V init 是类 Unix 操作系统传统的也是首款初始化系统。

SysV init 守护进程是一个基于运行级别的系统,它使用运行级别(单用户、多用户以及其他更多级别)和链接(位于 /etc /rcN.d/ 目录中,分别链接到 /etc/init.d 中的 init 脚本)来启动和关闭系统服务。SysV启动是线性、顺序的。一个S20的服务必须要等待S19启动完成才能启动,如果一个启动要花很多时间,那么后面的服务就算完全无关,也必须要等。

在 SysV init 中,服务被分成两大类,一类是可独立运行的服务,另一类是受xinetd管理的服务,而xinetd本身是一个独立运行的服务,用来负责管理一些不常用的服务,当这些服务需要被使用时,由xinetd来唤醒它们,当服务使用完后,这些服务会被结束以减少系统资源的占用。

(二)Upstart init

Upstart init 是由 Ubuntu 的制造商开发的基于事件的初始化系统,用于替代 SysV init 初始化系统。它用于 Ubuntu 6.10 - 14.10 版本和基于 RHEL 6 的系统中,之后的被 systemd 取代了。

UpStart(Upstart init daemon)是基于事件的启动系统,它使用事件来启动和关闭系统服务。Upstart是并行的,只要事件发生,服务可以并发启动。这种方式无疑要优越得多,因为它可以充分利用现在计算机多核的特点,大大减少启动所需的时间。

Upstart是基于事件的,当系统中的什么情况发生变化时,它会运行某个特定的程序。这里被运行的程序多半是用来启动或终止服务的脚本。这个配置方式和System V在系统进入某个运行级别的时候运行init脚本的链接的概念实际上是非常类似的。只不过Upstart更加灵活一些,Upstart不仅能在运行级别改变的时候启动或终止服务,也能在接收到系统发生其他改变的信息的时候启动或终止服务。这些系统的改变被称为“事件”。例如,当Upstart从udev接收到运行时文件系统加载、打印机安装或其他类似的设备添加或删除的信息,并采取相应的行动。Upstart也可以在系统启动、关闭或某个任务状态改变的时候启动或关闭服务。

UpStart 系统初始化的过程是在工作和事件的相互协作下完成的,可以大致描述为:系统上电后运行 GRUB 载入内核。内核执行硬件初始化和内核自身初始化。在内核初始化的最后,内核将启动 pid 为 1 的 init 进程(即 UpStart 进程),init 进程运行后,init 进程自身会产生不同的事件,这些最初的事件会触发一些工作运行,而每个工作运行过程中又会释放不同的事件,这些事件又将触发新的工作运行。如此反复,直到整个系统正常运行起来。

UpStart 是一个由事件触发工作运行(事件驱动机制)的初始化系统,每一个程序的运行都由其依赖的事件发生而触发的。UpStart 核心模块就是 Job 和 Event。

(三)systemd

systemd 中文名叫“系统管理守护进程”,是旨在以并行方式启动进程的替换传统 init 系统的初始化系统,目前已经在许多标准发行版(Fedora,OpenSuSE,Arch,RHEL,CentOS 等)中应用。借鉴 Mac OS。

开发 systemd 的主要目的就是减少系统引导时间和计算开销。systemd 最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,它是如今讨论最热烈的引导和服务管理程序。如果你的Linux系统配置为使用Systemd引导程序,它取替传统的SysV init,启动过程将交给systemd处理。systemd 的一个核心功能是它同时支持 SysV init的后开机启动脚本。

(四)Launchd

launchd 是 Mac OS 下用于初始化系统环境的 init 系统,它是内核装载成功之后在 OS 环境下启动的第一个进程。其实 systemd 的很多概念来源于此。

(五)Epoch

一种基于简单性的管理服务的 init 替换守护进程,旨在启动单线程进程。

(六)Mudar

一种用Python编写的 init 替换守护进程,在 Pardus GNU / Linux上实现,旨在异步启动进程

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

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

相关文章

matplotlib 柱状图_Matplotlib数据可视化:柱状图与直方图

↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜柱状图和直方图是两种非常类似的统计图,区别在于:直方图展示数据的分布,柱状图比较数据的大小。直方图X轴为定量数据,柱状图X轴为分类数据。因此&am…

php怎样完成批量审核,CMS_DedeCMS 批量取消审核文档的实现方法,今天修改了几个地方的代码 实 - phpStudy...

今天修改了几个地方的代码 实现了在原来dede文章批量管理的地方 添加一个 “取消审核” 如下图:实现方法:修改管理目录(默认为dede)下的文件:archives_do.php 插入以下代码(位置随意 可以放审核文档下面 方便记忆):复制代码代码如…

groovy.run 脚本_Picocli 2.0:类固醇上的Groovy脚本

groovy.run 脚本Picocli 2.0增加了对其他JVM语言(尤其是Groovy)的支持。 当Groovy语言具有CliBuilder类的内置CLI支持时,为什么还要使用picocli? 您可能喜欢picocli的使用帮助,默认情况下会显示ANSI 颜色和样式 。 您…

Linux 系统服务管理和控制程序(初始化系统/Init System) -- systemd 介绍

文章目录systemd 简介systemd 启动过程概述Systemd的争议systemd 简介 开发systemd的主要目的就是减少系统引导时间和计算开销。systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,…

mongodb msi安装包_跟我快速学数据存储:MongoDB非关系型数据库

想要学习更多编程,就点上方蓝字关注我们MongoDB概述01与Redis半持久化,存储于内存和硬盘不同,MongoDB是直接持久化,存储于硬盘的缓存系统。MongoDB非常流行,其中阿里云提供了云数据库MongoDB版。https://blog.csdn.net…

php页面 info,通过PATH_INFO方法实现页面伪静态_php

/*函数url_parse用于解析url,使用时需要在前面定义define(PATH_INFO,true);需要解析时调用该函数,取值方法用回$_GET[xxx]即可*/function url_parse(){if(!(isset($_SERVER[PATH_INFO])&&defined(PATH_INFO))){return;}$url substr($_SERVER[PA…

767 重构字符串_重构字符串型系统

767 重构字符串去年,我加入了一个项目,该项目从另一个软件公司接手,但未能满足客户需求。 如您所知,在“继承”的项目及其代码库中,有许多事情可以并且应该加以改进。 可悲的是(但并不奇怪)领域…

fanuc roboguide_FANUC机器人虚拟仿真教程:Roboguide弧焊仿真工作站工装添加

Roboguide软件左侧浏览树中的“Fixture”节点专门用于添加工装资源,软件支持添加自带的库文件数模以及外部导入的CAD数模。软件支持CSB、DXF、STL、IGES、3DS等格式数模文件,一般情况下将将外部数模转换为IGES或CSB格式后进行导入效果会更好一些。本期&a…

如何在 Ubuntu 14.04 和 12.04 上测试 systemd

本来,Ubuntu决定从Ubuntu 16.04 LTS开始使用systemd来替换当前的引导过程。Ubuntu 16.04预计在2016年4月发布,但是考虑到systemd的流行和需求,刚刚发布的Ubuntu 15.04采用它作为默认引导程序。另外,Ubuntu 14.04 Trusty Tahr和Ubu…

oracle怎么读取表空间文件大小,oracle获取表空间文件大小

oracle通过查询DBA_SEGMENTS表获取表空间文件信息,包括表空间名称,大小等 ? 1 select tablespace_name,sum(max_size),sum(bytes) from dba_segments group by tablespace_name; max_size和bytes的单位是字节。将上面的sql语句放到存储过程中执行&#…

java 枚举内嵌枚举_高度有用的Java ChronoUnit枚举

java 枚举内嵌枚举几年前,我发表了博客文章“ The Highly有用的Java TimeUnit Enum ”,其中介绍了JDK 5引入的TimeUnit枚举。 JDK 8引入了一个更新的枚举ChronoUnit ,它比TimeUnit更适合于并发以外的上下文(例如日期/时间操作&…

Chrome for Mac OS 的 快捷键

文章目录页面滚动其它页面滚动 快捷键功能说明Command ↑滚动到网页的顶部Command ↓滚动到网页的底部 其它 快捷键功能说明Shift Command [ 或 Shift Command ]左右切换标签页,到最后一个会重新循环Option Command ← 或 Option Command →左右切换标签页…

oracle分页包,Oracle分页获取数据的实现 (包和存储过程)

本文档主要是介绍针对oracle数据库中利用包和存储过程来实现分页获取数据的内容。其实该存储过程的主题思想及主要实现我也是从网上找的,自己做了整合。包括包头声明和包体实现部分以及C#代码具体调用部分,共大家参考并提出改进意见。本包中包括两个分页…

python-opencv 最快的遍历颜色空间_居住空间设计的七种设计风格

生活中每家每户的家居样式都是不一样的,它们都是各有各的风格。在居住空间设计中,设计师会根据居住者的风格喜好来定制相应的设计方案,以及融入设计师的风格特点来创造出独特的设计风格,那么让我看看都有哪些设计风格吧。传统风格…

java更好的语言_五个使Java变得更好的功能

java更好的语言我偶然发现了Brian Goetz 提出的有关Java数据类的建议 ,立即意识到我也对如何使Java更好地成为一种语言有一些想法。 我实际上有很多,但这只是五个最重要的简短列表。 专制(2006),迈克贾奇(…

Linux 初始化系统(系统服务管理和控制程序/Init System) -- System V init(SysV init) 的简单理解

文章目录SysV init 简介SysV init 的缺点运行级别主要文件和目录的截图SysV init 简介 System V init(缩写 SysV init)是类 Unix 操作系统中传统的也是首款初始化系统。 服务配置文件(bash 脚本文件)存放在目录 /etc/init.d 下 …

oracle查询file_name,Oracle DG环境下db_file_name_convert的实际意义

关于DG环境下备库数据文件重命名的问题:**前言:**主要想表明DG环境下备库数据文件重命名的问题,以及db_file_name_convert与log_file_name_convert的作用。**实验证明:**主库为备库备份一份控制文件RMAN> backup current controlfile for …

python收集数据程序_用一行Python代码进行数据收集探索!Python真牛逼!

简易的Pandas之路 任何使用P ython数据的人都会熟悉Pandas包。P andas是大多数行和列格式数据的go-to包。 如果你没有Pandas,请确保在终端中使用pip install安装: pip install pandas 现在,让我们看看Pandas包中的默认方法可以做些什么&#…

java使用缓冲区读取文件_在Java中使用Google的协议缓冲区

java使用缓冲区读取文件最近发布了 有效的Java第三版 ,我一直对确定此类Java开发书籍的更新感兴趣,该书籍的最新版本仅通过Java 6进行了介绍 。 在此版本中,显然存在与Java 7 , Java 8和Java 9密切相关的全新项目,例如…

浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- sysvinit/systemvinit(System V init)

文章目录从 sysvinit 到 systemd什么是 init 系统,init 系统的历史和现状sysvinit 概况运行级别sysvinit 运行顺序sysvinit 和系统关闭sysvinit 的管理和控制功能haltinitkillall5lastlastbmesgpidofpoweroffrebootrunlevelshutdownsulogintelinitutmpdumpwallsysvinit 的小结从…