init system
参考:5 Best Modern Linux ‘init’ Systems (1992-2015)
参考:Linux开机流程
参考:《鸟哥的 Linux 私房菜:基础学习篇 第四版》第十七章、认识系统服务 (daemons)
前言
在Linux和其他类Uniux系统中,init process(初始化进程)是系统启动时由内核执行的第一个进程,其PID为1。init process静默运行在后台,直到系统关闭。
init进程负责启动所有其他进程,比如守护进程、服务和其他后台进程。因此,它是系统中其它所有进程之父。一个进程可以启动许多个子进程,如果在子进程没死之前父进程死了,孤儿进程(orphan process)的父进程会变成init进程。

本文所关注的init system就是内核之后的第一个程序,也就是init process。
如果init process无法启动,后面将不会启动任何进程,系统将进入一个名为“Kernel Panic”的阶段。
这么多年过去了,许多的init system在主流Linux发行版中脱颖而出。
System V Init
System V (SysV) 是一个在类 Unix 系统中最成熟最受欢迎的init system,也是第一个商业 Unix 系统的init system。除了 Gentoo 使用自主的init system、Slackware 使用 BSD 风格的init system外,几乎所有的 Linux 发行版都率先使用 SysV 作为init system。SysV是 Unix/Linux 系统中所有进程的父进程。很多时候我们说init进程,实际上指的就是SysV。操作系统内核第一个调用的程序就是init,然后init去唤醒所有系统必须服务(本机的或者远端的)。
随着时间的推移,SysV 由于一些设计上的缺陷,有几个 替代init scheme被开发出来。这些init scheme为 Linux 提供更加高效和完美的init system。 尽管这些替代方案都超越了 SysV 并提供了更多新特性,但它们仍然和原始 SysV 初始化脚本保持兼容。
CentOS 7.X后,便由systemd替代init。如果你去/etc/init.d/下面会有个README提示你
You are looking for the traditional init scripts in /etc/rc.d/init.d,
and they are gone? Here's an explanation on what's going on: You are running a systemd-based OS where traditional init scripts have
been replaced by native systemd services files. Service files provide
very similar functionality to init scripts. To make use of service
files simply invoke "systemctl", which will output a list of all
currently running services (and other units). Use "systemctl
list-unit-files" to get a listing of all known unit files, including
stopped, disabled and masked ones. Use "systemctl start
foobar.service" and "systemctl stop foobar.service" to start or stop a
service, respectively. For further details, please refer to
systemctl(). Note that traditional init scripts continue to function on a systemd
system. An init script /etc/rc.d/init.d/foobar is implicitly mapped
into a service unit foobar.service during system initialization. Thank you! Further reading:
man:systemctl()
man:systemd()
http://0pointer.de/blog/projects/systemd-for-admins-3.html
http://www.freedesktop.org/wiki/Software/systemd/Incompatibilities
SystemD
SystemD 即 System Management Daemon,Unix命名约定,喜欢在守护进程(daemon)后面加d。
在Linux 平台中,SystemD 是一个相对较新的init scheme。它由 Fedora 15 引入,集成了各类工具以便更好的管理系统。主要目的是:系统初始化、管理和跟踪OS启动过程中 和 OS运行时 所有的系统进程。
Systemd 全面有别于其他传统的 Unix 初始化系统,特别是在系统和服务管理方面。它同样兼容 SysV 和 LBS 初始化脚本。
其中较为突出的特性如下:
- 纯粹、简单、高效的设计
- 启动时的并发和并行处理
- 更好的 API
- 开启可选进程的移除功能
- 使用 journald 来支持事件日志
- 使用 systemd calender timers 来支持任务计划
- 以二进制文件存储日志
- 保存 systemd 的状态以待今后查看
- 与 GNOME 更好整合实现等
- 查看 Systemd 初始化系统简介:Understanding and administering systemd
The Story Behind ‘init’ and ‘systemd’: Why ‘init’ Needed to be Replaced with ‘systemd’ in Linux
Upstart
Upstart由 Ubuntu 的制作团队开发,是一个基于事件的初始化系统,用以替代 SysV。它可以启动不同的系统任务(system tasks)和进程、在系统运行时校验进程并在系统关闭时结束进程。
Upstart是一个使用 SysV 和 Systemd 启动脚本的混合初始化系统。
Upstart 中值得一提的特性如下:
- Ubuntu 的原生初始化系统,但可以运行在其他所有的发行版中
- 基于事件启动/结束的任务和服务
- 启动/结束任务和服务时生成事件
- 可以由其他系统进程发送事件
- 使用 D-Bus 和 init 进程通信
- 用户可以启动/结束其各自的进程
- 可以再现崩溃的进程等
- 访问 Upstart 主页:http://upstart.ubuntu.com/index.html
OpenRC
OpenRC 是一个基于依赖关系的类 Unix 系统初始化方案,兼容 SysV。基本可以说是 SysV 的升级版,但必须要清楚记住的是:OpenRC 并非只是完全替代 /sbin/init 文件。
它所提供的出色特性如下:
- 可运行在包括 Gentoo 和 BSD 在内的多数 Linux 系统之中
- 支持硬件触发的初始化脚本(LCTT 译注:如硬件热插拔所触发的)
- 支持单个配置文件
- 不支持单个服务配置文件
- 以守护进程的方式运行
- 并行服务启动等
- 访问 OpenRC 主页:https://wiki.gentoo.org/wiki/OpenRC
runit
runit 同样是一个跨平台初始化系统,可以运行在 GNU/Linux、Solaris、BSD 和 Mac OS X 中,可用于替代 SysV,同时提供服务监控。
相比于 SysV 和其他 Linux 初始化系统,它提供了一些好用和卓越的组件,如下:
- 服务监控:每个服务都关联一个服务目录
- 清理进程状态,以保证每个进程处于干净状态
- 可靠的日志机制
- 快速的系统启动和关闭
- 可移植
- 打包方便
- 代码体积小等
- 访问 runit 主页:http://smarden.org/runit/
总结
Linux 中的初始化系统负责启动和管理所有的进程。此外,SysV 是 Linux 系统中主要的初始化系统,但由于一些性能缺陷,系统开发者已经开发出几个替代品。 除了上面几种替代方案,还有其他方案未列出。
init system的更多相关文章
- we are experimenting with a new init system and it is fun
http://0pointer.de/blog/projects/systemd.html Rethinking PID 1 If you are well connected or good at ...
- Linux’s init system & systemd
一.init system 1.计算机是如何启动的 以早期 Fedora 系统为例. 1.开机 2.BIOS 和 GRUB(引导加载程序) 3.Linux 内核启动后,init 进程 是在 Fedor ...
- System.arrayCopy()和普通数组复制之间的效率差别
都是System.arrayCopy() 效率高,到底有多高呢,拉出来遛遛就知道了: package JCF.ArrayList; import java.util.Date; public clas ...
- spring init
DN学院讲师招募 Markdown编辑器轻松写博文 TOP 50 CTO坐镇直招 读文章说感想获好礼 通过Spring @PostConstruct 和 @PreDestroy ...
- java代码中init method和destroy method的三种使用方式
在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等. ...
- spring init method destroy method
在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等. ...
- i.mx6 Android5.1.1 初始化流程之init.rc解析(未完成)
接上一篇:i.mx6 Android5.1.1 初始化流程之init进程 参考资料:http://blog.csdn.net/mr_raptor/article/category/799879 这个博 ...
- init() 方法
1 /** * servlet init()在web应用程序启动之后,第一个请求到达Servlet之前调用. * 问题1:如果init()中需要处理大量的工作,那么servlet在处理第一个请求需要花 ...
- Spring报错: org.springframework.beans.factory.support.BeanDefinitionValidationException: Couldn't find an init method named 'init' on bean with name 'car'(待解答)
在Spring工程里,有一个Car类的bean,Main.java主程序,MyBeanPostProcessor.java是Bean后置处理器. 文件目录结构如下: Car.java package ...
随机推荐
- 记录一次idea的git导致的macpro风扇狂转问题
现象 macpro风扇忽然狂转不停:使用软件Macs Fan Control检测如下:cpu温度持续过高(超过50度),风扇当前转速比较高 解决 观察cpu使用情况,发现git占用cpu很高,而且持续 ...
- AWS 存储服务(三)
目录 AWS S3 业务场景 挑战 解决方案 S3的好处 S3 属性 存储桶 Buckets 对象 Object S3 特性 S3 操作 可用性和持久性 一致性 S3 定价策略 S3高级功能 存储级别 ...
- 《Hadoop大数据技术开发实战》学习笔记(一)
基于CentOS7系统 新建用户 1.使用"su-"命令切换到root用户,然后执行命令: adduser zonkidd 2.执行以下命令,设置用户zonkidd的密码: pas ...
- Nginx基本使用方法
原帖:http://zyjustin9.iteye.com/blog/2017394 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人 ...
- csu 1756: Prime
1756: Prime Submit Page Summary Time Limit: 3 Sec Memory Limit: 128 Mb Submitted: 281 ...
- FineReport做成之后如何在Tomcat上运行
问题描述: 自己用FineReport做成的报表画面,要在Tomcat上运行启动 第一步:下载Tomcat 网址: http://tomcat.apache.org/download-80.cgi 下 ...
- python线程事件Event(30)
在python项目开发中,线程thread使用是比较常见的,在前面的文章中我们介绍了 python线程的创建 以及 线程互斥锁 ,今天还要额外介绍一个与线程相关的内容 – 事件Event. 一.pyt ...
- airflow安装rest api插件发现airflow webserver服务不能启动的解决办法
安装插件airflow-rest-api 1)获取 wget https://github.com/teamclairvoyant/airflow-rest-api-plugin/archive/ma ...
- [转帖]微软宣布即将开始大规模推送Windows 10 V1903重大版本更新
微软宣布即将开始大规模推送Windows 10 V1903重大版本更新 https://www.cnbeta.com/articles/tech/894303.htm 微软要批量更新 1903了 bu ...
- Java 最常见 200+ 面试题 + 全解析
本文分为十九个模块,分别是: Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring Clou ...