嵌入式linux int进程详解

分享到:
           

    init是Linux系统开发执行的第一个进程,进程ID为1,是系统所有进程的起点,主要用来执行一些开机初始化脚本和监视进程。Linux系统在完成核内引导以后就开始运行init程序,init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它由若干行命令所组成。在RHEL 4系统中,inittab配置文件的内容如下所示。

    #
    # inittab     This file describes how the INIT process should set up
    #           the system in a certain run-level.
    #
    # Author:     Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
    #           Modified for RHS Linux by Marc Ewing and Donnie Barnes
    #
    # Default runlevel. The runlevels used by RHS are:
    #   0 - halt (Do NOT set initdefault to this)
    #   1 - Single user mode
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #   3 - Full multiuser mode
    #   4 - unused
    #   5 - X11
    #   6 - reboot (Do NOT set initdefault to this)
    #
    //表示当前缺省运行级别为5,启动系统进入图形化界面
    id:5:initdefault:
    //启动时自动执行/etc/rc.d/rc.sysinit脚本
    # System initialization.
    si::sysinit:/etc/rc.d/rc.sysinit
    l0:0:wait:/etc/rc.d/rc 0
    l1:1:wait:/etc/rc.d/rc 1
    l2:2:wait:/etc/rc.d/rc 2
    l3:3:wait:/etc/rc.d/rc 3
    l4:4:wait:/etc/rc.d/rc 4
    //当运行级别为5时,以5为参数运行/etc/rc.d/rc脚本,init将等待其返回
    l5:5:wait:/etc/rc.d/rc 5
    l6:6:wait:/etc/rc.d/rc 6
    //在启动过程中允许按[CTRL+ALT+DELETE]重启系统
    # Trap CTRL-ALT-DELETE
    ca::ctrlaltdel:/sbin/shutdown -t3 -r now
    # When our UPS tells us power has failed, assume we have a few minutes
    # of power left. Schedule a shutdown for 2 minutes from now.
    # This does, of course, assume you have powerd installed and your
    # UPS connected and working correctly.
    pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

    # If power was restored before the shutdown kicked in, cancel it.
    pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
    //在运行级别2、3、4、5上以ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登录,如果进程退出则再次运行mingetty程序
    # Run gettys in standard runlevels
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6

   //在级别5上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行
    # Run xdm in runlevel 5
    x:5:respawn:/etc/X11/prefdm -nodaemon

    inittab配置文件每行的基本格式如下。

    id:runlevels:action:process

    其中某些部分可以为空,下面我们逐一介绍。

    1.id
    1~2个字符,配置行的惟一标识,在配置文件中不能重复。

    2.runlevels
    配置行适用的运行级别,在这里可填入多个运行级别,比如12345或者35等。

    Linux有7个运行级别。
    ● 0:关机。
    ● 1:单用户字符界面。
    ● 2:不具备网络文件系统(NFS)功能的多用户字符界面。
    ● 3:具有网络功能的多用户字符界面。
    ● 4:保留不用。
    ● 5:具有网络功能的图形用户界面。
    ● 6:重新启动系统。

    3.action

    Init有如下几种行为,如表1.1所示。

                表1.1                     init行为

行   为 描   述
respawn 启动并监视第4项指定的process,若process终止则重启它
wait 执行第4项指定的process,并等待它执行完备
once 执行第4项指定的process
boot 不论在哪个执行等级,系统启动时都会运行第4项指定的process
bootwait 不论在哪个执行等级,系统启动时都会运行第4项指定的process,且一直等它执行完备
off 关闭任何动作,相当于忽略该配置行
ondemand 进入ondemand执行等级时,执行第4项指定的process
initdefault 系统启动后进入的执行等级,该行不需要指定process
sysinit 不论在哪个执行等级,系统会在执行boot及bootwait之前执行第4项指定的process
powerwait 当系统的供电不足时执行第4项指定的process,且一直等它执行完备
powerokwait 当系统的供电恢复正常时执行第4项指定的process,且一直等它执行完备
powerfailnow 当系统的供电严重不足时执行第4项指定的process
ctrlaltdel 当用户按下【Ctrl+Alt+Del】时执行的操作
kbrequest 当用户按下特殊的组合键时执行第4项指定的process,此组合键需在keymaps文件定义

    4.process

    process为init执行的进程,这些进程都保存在目录/etc/rc.d/rcX中,其中的X代表运行级别,rc程序接收X参数,然后运行/etc/rc.d/rc.X下面的程序。使用如下命令可以查看/etc/rc.d目录内容。

    #ls -l /etc/rc.d/
    总用量 112
    drwxr-xr-x 2 root root 4096 3月 15 14:44 init.d
    -rwxr-xr-x 1 root root 2352 2004-03-17 rc
    drwxr-xr-x 2 root root 4096 3月 15 17:42 rc0.d
    drwxr-xr-x 2 root root 4096 3月 15 17:42 rc1.d
    drwxr-xr-x 2 root root 4096 3月 15 17:42 rc2.d
    drwxr-xr-x 2 root root 4096 3月 15 17:42 rc3.d
    drwxr-xr-x 2 root root 4096 3月 15 17:42 rc4.d
    drwxr-xr-x 2 root root 4096 3月 15 17:42 rc5.d
    drwxr-xr-x 2 root root 4096 3月 15 17:42 rc6.d
    -rwxr-xr-x 1 root root 220 2003-06-24 rc.local
    -rwxr-xr-x 1 root root 27411 2005-08-03 rc.sysinit

    使用如下命令查看/etc/rc.d/rc5.d的内容。

    # ls -l /etc/rc.d/rc5.d
    总用量 432
    lrwxrwxrwx 1 root root 21 4月 29 15:11 K01tog-pegasus -> ../init.d/tog-pegasus
    lrwxrwxrwx 1 root root 24 4月 29 14:20 K02NetworkManager -> ../init.d/NetworkManager
    lrwxrwxrwx 1 root root 17 4月 29 15:29 K02oddjobd -> ../init.d/oddjobd
    lrwxrwxrwx 1 root root 14 4月 29 15:31 K05innd -> ../init.d/innd
    lrwxrwxrwx 1 root root 19 4月 29 14:17 K05saslauthd -> ../init.d/saslauthd
    lrwxrwxrwx 1 root root 19 4月 29 14:21 K10dc_server -> ../init.d/dc_server
    lrwxrwxrwx 1 root root 16 4月 29 14:21 S09pcmcia -> ../init.d/pcmcia
    lrwxrwxrwx 1 root root 17 4月 29 14:17 S10network -> ../init.d/network
    lrwxrwxrwx 1 root root 16 4月 29 14:17 S12syslog -> ../init.d/syslog

    这些文件都是符号链接,以S打头的标识启动该程序,而以K打头的标识终止该程序,后面的数字标识执行顺序,越小越先执行,剩下的标识程序名。系统启动或者切换到该运行级别时会执行以S打头的程序,系统切换到该运行级别时会执行以K打头的程序。

    这个目录下的程序可通过chkconfig程序进行管理,当然这个目录下的程序需要符合一定规范,如果了解shell编程,可以查看这些符号链接所指向的程序的源码。

    init也是一个进程,和普通的进程具有一样的属性。比如修改了/etc/inittab,想让修改马上生效,可通过运行“kill -SIGHUP 1”来实现,也可通过运行“init q”来实现。

华清远见嵌入式linux视频教程免费下载

   热点链接:

   1、嵌入式linux驱动要学哪些
   2、嵌入式Linux串口编程基础
   3、嵌入式Linux内核如何编译
   4、Linux内核模块程序结构
   5、典型嵌入式Linux系统设置

更多新闻>>