linux初始化进程init分析

1、init进程

init进程,是一个由内核启动的用户级进程,内核自行启动后,就通过启动 init来完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。init程序位于/sbin/init,如果内核找不到init,就会尝试运行/bin/sh;

 

2、运行级别

运行级就 是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。

  • 0 – 停机(千万不能把initdefault 设置为0 )
  • 1 – 单用户模式
  • 2 – 多用户,没有 NFS
  • 3 – 完全多用户模式(标准的运行级)
  • 4 – 没有用到
  • 5 – X11 (xwindow)
  • 6 – 重新启动 (千万不要把initdefault 设置为6 )

3、inittab文件

linux系统在/etc/inittab文件中配置运行级别,供init进程调用。默认首先会启动位于/etc/rc.d/init.d目录中的脚本,这些脚本被“ln”命令连接到 /etc/rc.d/rcn.d 目录(启动n表示0-6的运行级别)。inittab文件所包含的域具有严格的格式。该文件中每个条目的格式为:

id:rstart:action:process:

其中,id域是相应进程的唯一标识。rstart域所包含的数字表示运行该进程的级别。action域告诉init进程如何对待 process所对应的进程。这里可以有很多种动作,但是最常见的是wait和respawn,wait意味着当进程启动后等待它结束,respawn则意 味着如果该进程不存在,则启动相应的进程,如果它存在,那么只要它一掉下来就立即重新启动它。process域包含了实际要运行的命令。

4、rcn目录

rcn.d目录中的脚本都是一些链接,这样是为了省去不必要的副本。这些链接的格式为:

Snnn.script_name
Knnn.script_name

其 中,
S:代表启动相应的进程,K:代表杀死相应的进程。nn:是00至99的两位数字,不过在有些系统中是000至999三位数字。 在不同目录中的链接应采用同一数字。例如,如果某个服务在rc3.d中启动时名为S45.myscript,那么如果希望它在rc2.d中启动,应当使用 链接名S45.myscript。script_name:相应脚本的文件名,根据所在操作系统的不同,它们可能位于下列目录中:/usr/sbin/init.d、/etc/rc.d、/etc/init.d。
当 init进程调用相应的运行级别脚本时,杀进程按照从高到低的K序号进行,即K23.myscript -> K12.named;而启动进程按照从低到高的序号进行。

5、自定义启动服务

创建启动服务可以通过以下3中方法实现:

1).创建启动服务脚本

创建启动脚本必须符合以下条件:

  • 编写该脚本,确保它符合调用标准。
  • 确信它能够启动或终止相应的服务。
  • 将该脚本放置于(取决于操作系统) /etc/init.d或/usr/sbin/init.d或/etc/rc.d中。
  • 在相应的rcN.d目录中按照合理的命名方式创建链接。

例如现在将要启动、停止一个名为rc.audit的服务,该服务运行于级别3,停止于级别6。通过查看rcN.d中的条目,我 们发现序号35空闲,于是就使用该序号(实际上,系统并不对使用已占用的序号作任何检查)。

假定该脚本已经通过了测试,它能够正确地启动 和停止。现在我们把该脚本放置在相应的运行级别目录中。
在本系统中,rcN.d目录位于/etc/rc.d目录下,而我的运行级别脚本保存在/etc/rc.d/init.d目录下(如果系统目录结构与上面的不同,那么需要对下面的命令作相应的调整)。

$pwd
/etc/rc.d/rc3.d

$ln -s /init.d/rc.audit S35rc.audit
$ls -l
lrwxrwxrws 1 root root S35rc.audit -> /init.d/rc.audit

$pwd
/etc/rc.d/rc6.d

$ln -s /init.d/rc.audit K35rc.audit
$ls -l
lrwxrwxrwx 1 root root K35rc.audit -> /init.d/rc.audit

2).inittab启动

我们还可以通过在inittab文件中加入相应的条目来做到这一点。

  • 首先我确定该脚本能够正确运行
  • 对inittab文件做备份。$ cp /etc/initab /etc/inittab.bak
  • 编辑inittab文件,在该文件末尾加入这样一个条目:rc.audit:3:once:/usr/local/etc/rc.audit,保存并退出。

上面的一条意思是:
行首的rc.audit是该进程在运行级别3中的唯一标识,该进程只运行一次,所要运行的脚本是/usr/local/etc/rc.audit。

3).rc.local启动

如果不想把/etc/inittab文件弄得过于杂乱,还有其他的方法可以实现启动和停止服务的功能。大多数系统都含有一个名为rc.local的文件, 一般来说也是位于/etc目录下。该脚本文件将在inittab和运行级别脚本之后运行。可以在该文件中加入任何命令,或从中调用最习惯用的启动脚本。有 些系统还在/bin目录下(更多的是在/usr/sbin目录下)含有一个名为shutdown的脚本文件,可以使用它来关闭某些服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值