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)执行信号处理,一般重启设备。

BusyBox init工作流程的更多相关文章

  1. struts2工作流程

    struts2的框架结构图 工作流程 1.客户端请求一个HttpServletRequest的请求,如在浏览器中输入http://localhost: 8080/bookcode/Reg.action ...

  2. Hadoop随笔(一):工作流程的源码

    一.几个可能会用到的属性值 1.mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution 这两个 ...

  3. 利用 Gulp 处理前端工作流程

    最近做项目,因为每次做完后都要手动压缩CSS.JS 等文件,压缩后另存为 *.min.xxx. Less 还要手动输入命令进行编译,调整页面也经常要手动刷新页面看效果,很麻烦,就尝试用 gulp 去处 ...

  4. ios NSURLSession(iOS7后,取代NSURLConnection)使用说明及后台工作流程分析

    NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意, ...

  5. BusyBox Init

    嵌入式系统内核启动后的第一个程序就是init,一般位于/sbin/init(一般是符号链接到/bin/busybox), 但有些也会直接放在根目录下如linuxrc,busybox的init不支持多级 ...

  6. ecshop 工作流程加载配置介绍

    ecshop 工作流程加载配置介绍 分类: ecshop2014-09-14 09:36 729人阅读 评论(2) 收藏 举报 模板引擎工作流 这里简单介绍下echsop工作流程: 首先,你会发现一般 ...

  7. 前端工作流程自动化——Grunt/Gulp 自动化

    什么是自动化 先来说说为什么要自动化.凡是要考虑到自动化时,你所做的工作必然是存在很多重复乏味的劳作,很有必要通过程序来完成这些任务.这样一来就可以解放生产力,将更多的精力和时间投入到更多有意义的事情 ...

  8. GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

    最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮 ...

  9. 第2章 rsync算法原理和工作流程分析

    本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释. 以下是本文的姊妹篇: 1.rsync(一):基本命令和用法 2.rsync(二):ino ...

随机推荐

  1. js:获取节点相关的 nodeName,nodeType,nodeValue

    getElementById() getElementsByName() getElementsByTagName() hasChildNodes() nodeName nodeType=1元素节点/ ...

  2. 基于JavaScript 声明全局变量的三种方式

    本文转自脚本之家:http://www.jb51.net/article/36548.htm JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名( ...

  3. Linux内存初始化(三) 内存布局

    一.前言 同样的,本文是内存初始化文章的一份补充文档,希望能够通过这样的一份文档,细致的展示在初始化阶段,Linux 4.4.6内核如何从device tree中提取信息,完成内存布局的任务.具体的c ...

  4. 修改oracle数据库的编码为utf-8

    1.查看数据库字符集 ? 数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集. 客户端字符集环境select * ...

  5. go系列之数组

    数组 数组是同一类型元素的集合.例如,整数集合 5,8,9,79,76 形成一个数组.Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组.(译者注:当然,如果是 interface{} ...

  6. unity, 人物与移动跳台的交互

    ----更新(2015-7-1): 也可以用itween来移动跳台. ---- 例如人物跳到往复运动的移动跳台上后应随跳台运动. 要实现这个效果有两个思路,一是用运动学一是用动力学. 用动力学实现就是 ...

  7. python 在升级到python2.7之后安装相关插件

    # yum update # yum install centos-release-SCL # yum search all python27 在搜索出的列表中发现python27-python-de ...

  8. 使用xtrabackup(innobackupex)实现MySQL的热备

    mysql 的热备http://www.178linux.com/10139http://www.linuxidc.com/Linux/2014-04/99671.htmhttp://634871.b ...

  9. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  10. Lerp和SmoothDamp比较

    Lerp更像是线性衰减,而SmoothDamp像是弧形衰减,两者都是由快而慢 其中SmoothDamp多用于相机跟随.但如果其他类型的插值,我个人觉的其实都差不多 SmoothDamp: transf ...