BusyBox init工作流程
2015-09-19 17:11
148 查看
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)执行信号处理,一般重启设备。
/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)执行信号处理,一般重启设备。
相关文章推荐
- android4.x 增加一个新按键&&修改android默认语言
- 从H264/H265码流中获取宽、高及帧率
- windos8.1 GNUstep环境搭建,objective-c
- Netty
- C#创建和初始化类
- Wireshark - 过滤规则
- virtual 析构函数作用
- 磁盘误格式化
- Java编程思想第四版读书笔记——第三章 操作符
- 关于JavaScript中替换字符串需要注意的问题
- Java内存回收机制(转)
- 【转载】vim格式对齐命令
- 基础数据结构--线性表实现
- dhcp server 配置
- 学习JAVA--线程1
- scala apply方法 笔记
- MySQL常用代码 笔记
- 如何避免在Block里用self造成循环引用
- Linux系统管理之——软件包管理
- C/C++中的一些区别