• BusyBox init工作流程


    linux启动完成后,运行由Busybox产生的init进程。

    /sbin/init是系统启动的第一个用户进程,pid=1。
    init的工作是根据/etc/inittab脚本来进行系统的初始化工作,关机前的工作等等。

    init代码在BusyBox中init/init.c中,主要进行以下工作:

    》为init进程设置信号处理进程。

    》对控制台进行初始化。

    》解析inittab文件即/etc/inittab。

    》若无/etc/inittab,采用默认的inittab,运行初始化脚本/etc/init.d/rcS.

    》运行inittab中其他命令。

    ----------------------------------------------------------------------------

    系统默认的inittab:

    #         ::sysinit:/etc/init.d/rcS
    #         ::askfirst:/bin/sh
    #         ::ctrlaltdel:/sbin/reboot
    #         ::shutdown:/sbin/swapoff -a
    #         ::shutdown:/bin/umount -a -r
    #         ::restart:/sbin/init

    #         tty2::askfirst:/bin/sh
    #         tty3::askfirst:/bin/sh
    #         tty4::askfirst:/bin/sh

    不管自己的inittab,还是系统默认inittab,一般首先运行/etc/init.d/rcS脚本,之后再进行后续工作。

    -----------------------------------------------------------------------------

    action解析:

    sysinit:为init提供初始化命令行的路径。

    respawn:在紧跟进程结束后,重启启动该进程(后边的process)。--复位,重启

    askfirst:类似respawn,主要用途是减少系统上执行的终端应用程序的数量,

                   会在控制台上显示“Please press Enter to active this console"的信息,

                   并在系统重启之前等待用户按下”Enter“键。

    wait:通知init必须等到相应的进程执行完之后才能继续执行其他的动作。

    once:进程只执行一次,而且不会等待它完成。

    ctrlaltdel:当按下ctrl-Alt-Del组合键时运行的进程。

    shutdown:当系统关机时运行的进程。

    restart:当init进程重启启动时执行的进程,事实上就是init本身。

    -------------------------------------------------------------------------------

    跟踪init/init.c中init的执行流程,可知其工作流程:

    在init_mian()中完成inittab解析后,组成init_action[],然后顺序阻塞执行:

    SYSINIT -> WAIT -> ONCE ->  循环RESPAWN|ASKFIRST

    命令执行通过run_actions:

    阻塞执行SYSINIT|WAIT|ONCE|CTRLALTDEL|SHUTDOWN -> RESPAWN|ASKFIRST仅执行一次

    中间接受到信号(CTRLALTDEL)执行信号处理,一般重启设备。

  • 相关阅读:
    一周小记(十七)
    一周小记(十九)
    2021/12/28组会
    AdaIN论文阅读(Arbitrary Style Transfer in Realtime with Adaptive Instance Normalization)
    PostgreSQL新增、更新、删除触发器
    leetcodedphard最小距离
    leetcodedp编辑距离问题两个字符串的删除操作
    正向代理代理客服端,反向代理代理服务器
    mybatisplus逻辑删除 3.1一下版本
    Eclipse使用指定JDK,无需配置Path变量
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/4821814.html
Copyright © 2020-2023  润新知