Linux中init进程介绍及常用方法

init(为英语:initialization的简写)是Unix和类Unix系统中用来产生其它所有进程的程序。它以守护进程的方式存在,其进程号为1。

所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以init始终是第一个进程(其进程编号始终为1)。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

BSD风格

BSD init运行存放于’/etc/rc’的初始化shell脚本,然后启动基于文本模式的终端(getty)或者基于图形界面的终端(窗口系统,如X)。 这里没有运行模式的问题,因为文件’rc’决定了init如何执行。

优点: 简单且易于手动编辑。

缺点: 如果第三方软件需要在启动过程执行它自身的初始化脚本,它必须修改已经存在的启动脚本,一旦这种过程中有一个小错误,都将导致系统无法正常启动。

值得注意的是,现代的BSD派生系统一直支持使用’rc.local’文件的方式,它将在正常启动过程接近最后的时间以子脚本的方式来执行。这样做减少了整个系统无法启动的风险。然后,第三方软件包可以将它们独立的start/stop脚本安装到一个本地的’rc.d’目录中(通常这是由 ports collection/pkgsrc 完成的)。都被分成更小的子脚本,和SysV类似。rcorder通常根据在rc.d目录中脚本之间的依赖关系来决定脚本的执行顺序。

SysV风格

System V init检查’/etc/inittab’文件中是否含有’initdefault’项。 这告诉init系统是否有一个默认运行模式。如果没有默认的运行模式,那么用户将进入系统控制台,手动决定进入何种运行模式。

优点: 灵活性强

缺陷: 比较复杂

其他风格

很多人一直努力地从某些方面改进传统的init守护进程,使它变得更完善。下面列出的是一些改进,没有特别的顺序:

SystemStarter, 用来替代launchd—Apple Mac OS X开启进程

Initng, 完全代替init,可以异步开启进程

Upstart, 完全代替init,可以异步开启进程由Ubuntu使用

Service Management Facility, 完全代替/重新设计Solaris启动Solaris 10

runit, 跨平台的完全代替init可以并行启动服务

BootScripts, GoboLinux

Mudur, 用Python写成的init替代品, 可以异步开启进程,Pardus Linux发行版

systemd, 完全替代init,可并行启动服务,并能减少在shell上的系统开销,为Fedora、ArchLinux所使用

System V中运行模式

Linux用init命令可以实现关机、重启、切换模式:

System V中运行模式描述了系统各种可能的状态。通常会有8种运行模式,即运行模式0到6和S或者s。其中运行模式3为”保留的”运行模式:

/etc/inittab

1#

2# inittab This file describes how the INIT process should set up

3# the system in a certain run-level.

4#

5# Author: Miquel van Smoorenburg,

6# Modified for RHS Linux by Marc Ewing and Donnie Barnes

7#

8# Default runlevel. The runlevels used by RHS are:

9# 0 – halt (Do NOT set initdefault to this)

10# 1 – Single user mode

11# 2 – Multiuser, without NFS (The same as 3, if you do not have networking)

12# 3 – Full multiuser mode

13# 4 – unused

14# 5 – X11

15# 6 – reboot (Do NOT set initdefault to this)

16#

17id:3:initdefault:

0是关机

1是单用户

2是多用户,不联网

3是多用户

4是不使用的

5是xwindows,也就是有界面的

6是重启

init命令很简单。直接输入init + 你想要的模式回车就行。

比如输入 : init 0就是关机

init 3 就是切换到多用户

init 5 就是切换到界面

init 6 就是重启