论坛首页 综合技术版 Linux

gentoo关键引导步骤 - init进程详解

浏览 260 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-06-16 关键字: gentoo linux init

首先推广一下javaeye的 gentoo圈子

 

介绍

init 是由内核启动的用户进程,处于系统引导的最后一步。
内核会在这最后一步,尝试执行/sbin/init指令,如果找不到init,内核会执行/bin/sh,如果执行失败或找不到,将直接导致系统启动失败。
当然,一般情况下,这种出错概率还是很低的。完成这一步,就表示系统启动引导完成了。
作为系统里第一个进程,init当然会有它的特色,即进程的id为1。

详解

以下转自 linuxsir 的 jarchun 写的文章,分析了init启动时的一些细节:

    init会按任务表/etc/inittab里面的设置运行对应的脚本。我们可以为系统制定多个运行环境以满足不同任务的需要,在 inittab中称之为运行等级(runlevel)。

    下面是我的gentoo的/etc/inittab文件:
 


    该文件有一个基本类型的指令,它们指定命令行,命令行所采取的动作,在何种运行等级下激活命令。这引起命令行的格式大体如下:
id:runlevels:action:process
    id是任意一个名称(具体是什么并不重要),runlevels是一个数字串(代表运行等级),action描述何时执行命令,process指定执行的实际命令。

    拿启动agetty的命令行举例:
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
    该命令告诉init,它应该在引导后以运行等级1-5运行命令/sbin/agetty 38400 tty1。动作标记respawn表示命令在退出时重新运行(当用户在shell输入exit的时候)。

    ·respawn:启动命令并监视命令的执行,当进程退出时,再次执行该命令(通常用于虚拟终端设备上的登录提示)。
    ·wait:进入指定运行等级时,启动进程。init会停下来,直到执行完成。这个标记用于设置特定等级下软件的启动。
    ·once:进入指定的任一运行等级时,启动一次进程。
    .boot:当系统启动时执行,这种类型的执行忽略runlevel.
    .bootwait:当系统启动时执行,init进程等待这些脚本执行完成,象/etc/rc.
    ·initdefault:这种类型的项指定在系统引导时进入哪个运行等级。
    .sysinit:在boot或者bootwait之前启动,这种类型的执行忽略runlevel.
    ·powerwait:这类指令给出在电源不足时需要执行的命令。init直到进程完成后才继续工作。
    ·powerfail:与powerwait类似,但init不等待进程完成。
    ·powerworkwait:电源正常后执行。init暂停,直到进程结束。
    ·powerfailnow:当便携机电池或外部UPS电池电量不足时执行。
    ·ctrlaltdel:指定init在捕获ctrl+alt+del组合键时执行的命令。
    ·kbdrequest:把特殊动作映射到特定的按键。Debian中的是alt+UpArrow。
 
    从上面的分析可以看到:
    id:3:initdefault:
    #系统的缺省级别是3

    si::sysinit:/sbin/rc sysinit
    #系统启动时自动执行脚本/sbin/rc sysinit

    l3:3:wait:/sbin/rc default
    #当系统运行级别是3的时候,init等待/sbin/rc default执行完

    c1:12345:respawn:/sbin/agetty 38400 tty1 linux
    #在1-5运行级别的时候运行/sbin/agetty,如果进程退出,再次执行/sbin/agetty

    ca:12345:ctrlaltdel:/sbin/shutdown -r now
    #在1-5运行级别按下ctrlaltdel,那么系统就shutdown now!!!

    x:a:once:/etc/X11/startDM.sh
    #不管是什么runlevel,都会执行/etc/X11/startDM.sh,启动X,只有启动一次
   
论坛首页 综合技术版 Linux

跳转论坛:
JavaEye推荐