inittab - 与 sysv 兼容的 init 进程使用的初始化文件格式
描述
inittab 文件描述在系统引导及通常的操作期间, 都启动哪些进程 (比如 /etc/init.d/boot, /etc/init.d/rc, getty 等等). Init(8) 讨论有关 runlevels (运行级) 的概念, 每一个运行级都有它自己启动进程的集合. 有效的运行级为 0-6 加上用于 ondemand 条目的 A, B 和 C. inittab 文件中的每一个条目有如下的格式:
-
id:runlevels:action:process
以 `#' 开头的行被忽略.
- id
- inittab 文件中条目的唯一标识, 限于 1-4 个字符 (如果是用版本号小于 5.2.18 或 a.out 的库编译生成的 sysvinit 程序, 则仅限于 2 个字符).
注意: 对于 getty 或其它的注册进程, id 必须是响应的终端线路的 tty 后缀, 如 1 响应 tty1, 否则, 注册过程不能正常的工作.
- runlevels
- 列出发生指定动作的运行级.
- action
- 描述要发生的动作.
- process
- 要执行的进程. 如果 process 域以一个 `+' 开头, init 不会在 utmp 和 wtmp 文件中为此进程记帐. 这是由于 getty 自己主持 utmp/wtmp 记帐的需要, 同时这也是一个历史遗留的漏洞.
runlevels 域可以包含表示不同运行级的多个字符, 例如 123 表示本进程在运行级为 1, 2 和 3 时都要启动. 用于 ondemand 条目的 runlevels 域可以包含 A, B, 或 C. 用于 sysinit, boot, 和 bootwait 条目的 runlevels 域被忽略.
当改变运行级时, 在新运行级中没有给出的那些正在运行的进程被杀死, 先使用 SIGTERM 信号, 然后是 SIGKILL.
action 域可以使用的动作有:
- respawn
- 该进程只要终止就立即重新启动 (如 getty).
- wait
- 只要进入指定的运行级就启动本进程, 并且 init 等待该进程的结束.
- once
- 只要进入指定的运行级就启动一次本进程.
- boot
- 在系统引导期间执行本进程. runlevels 域被忽略.
- bootwait
- 在系统引导期间执行本进程. 并且 init 等待该进程的结束 (如 /etc/rc). runlevels 域被忽略.
- off
- 什么也不做.
- ondemand
- 在进入 ondemand 运行级时才会执行标记为 ondemand 的那些进程. 无论怎样, 实际上没有改变运行级 (ondemand 运行级就是 `a', `b', 和 `c').
- initdefault
- initdefault 条目给出系统引导完成后进入的运行级, 如果不存在这样的条目, init 就会在控制台询问要进入的运行级. process 域被忽略.
- sysinit
- 系统引导期间执行此进程. 本进程会在 boot 或 bootwait 条目之前得到执行. runlevels 域被忽略.
- powerwait
- 本进程在电源不足时执行. 通常在有进程把 UPS 和计算机相连时通知 init 进程, Init 在继续其它工作之前要等待此进程结束.
- powerfail
- 类似 powerwait, 但是init 不等待此进程完成.
- powerokwait
- 在 init 收到电源已经恢复的通知后立即执行此进程.
- powerfailnow
- 本进程在 init 被告知 UPS 电源快耗尽同时外部电源失败 (无效) 时被执行. (假设 UPS 和监视进程能够发现这样的情况).
- ctrlaltdel
- 在 init 收到 SIGINT 信号时执行此进程. 这意味着有人在控制台按下了 CTRL-ALT-DEL 组合键, 典型地, 可能是想执行类似 shutdown 然后进入单用户模式或重新引导机器.
- kbrequest
- 本进程在 init 收到一个从控制台键盘产生的特殊组合按键信号时执行.
对于此功能本文档尚未完成; 可以在 kbd-x.xx 包中找到更多信息 (在写作本文档时最新的是 kbd-0.94). 当然你可能想为某些 "KeyboardSignal" 行为映射组合键, 如为了映射 (Alt-上箭头) 可以在键盘映射文件中 使用如下的方式:
-
alt keycode 103 = KeyboardSignal
-
举例
这是一个与老的 Linux inittab 文件类似的例子文件:
-
# inittab for linux
id:1:initdefault:
rc::bootwait:/etc/rc
1:1:respawn:/etc/getty 9600 tty1
2:1:respawn:/etc/getty 9600 tty2
3:1:respawn:/etc/getty 9600 tty3
4:1:respawn:/etc/getty 9600 tty4
本文件在引导时执行 /etc/rc 并且在 ty1-tty4 上启动 getty 进程.
一个更详尽的 inittab 会有不同的运行级 (参考本身的注释):
-
# 进入默认的运行级
id:2:initdefault: # 在进行其它工作之前先完成系统初始化.
si::sysinit:/etc/rc.d/bcheckrc # 运行级 0 挂起系统, 6 重新引导, 1 单用户模式.
l0:0:wait:/etc/rc.d/rc.halt
l1:1:wait:/etc/rc.d/rc.single
l2:2345:wait:/etc/rc.d/rc.multi
l6:6:wait:/etc/rc.d/rc.reboot # "3 个键" 按下时要做的工作.
ca::ctrlaltdel:/sbin/shutdown -t5 -rf now # 运行级2和3: 在控制台生成 getty 进程, 运行级为3时在 modem 上生成 getty.
1:23:respawn:/sbin/getty tty1 VC linux
2:23:respawn:/sbin/getty tty2 VC linux
3:23:respawn:/sbin/getty tty3 VC linux
4:23:respawn:/sbin/getty tty4 VC linux
S2:3:respawn:/sbin/uugetty ttyS2 M19200
文件
/etc/inittab
inittab - 与 sysv 兼容的 init 进程使用的初始化文件格式的更多相关文章
- 内核启动流程3--Busybox的init进程
Busybox是用来制作文件系统的一个工具集,可以用来替换GNU fileutils shellutils等工具集,它为各种小型的或者嵌入式系统提供了比较完全的工具集. 它提供的核心程序中包括了用户空 ...
- 第4阶段——制作根文件系统之分析init进程(2)
本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3) 分析busybox中init进 ...
- Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度(六)
前面我们了解到了0号进程是系统所有进程的先祖, 它的进程描述符init_task是内核静态创建的, 而它在进行初始化的时候, 通过kernel_thread的方式创建了两个内核线程,分别是kernel ...
- 制作根文件系统之Busybox init进程的启动过程分析
先来介绍一下什么是Busybox:它是将众多的UNIX命令集合进一个很小的可执行程序中. 在制作根文件系统之内核如何启动init进程中遗留了一个问题是/linuxrc是内核启动的第一个应用程序,那么它 ...
- Linux内核分析-使用gdb跟踪调试内核从start_kernel到init进程启动
姓名:江军 ID:fuchen1994 实验日期:2016.3.13 实验指导 使用实验楼的虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-3.18.6/a ...
- ARM-Linux移植之(三)——init进程启动流程分析
我们通常使用Busybox来构建根文件系统的必要的应用程序.Busybox通过传入的参数来决定执行何种操作.当init进程启动时,实际上调用的是Busybox的init_main()函数,下面我们来分 ...
- 构建根文件系统之init进程分析
busybox是ls.cp等命令的集合. 执行ls时,实际上是执行了busybox ls 执行cp时,实际上是执行了busybox cp 分析init程序之前,再让我们回想一下我们的目标:u-boot ...
- 容器内init进程方案
背景 进程标识符 (PID) 是Linux 内核为每个进程提供的唯一标识符.熟悉docker的同学都知道, 所有的进程 PID都属于某一个PID namespaces, 也就是说容器具有一组自己的 P ...
- Linux---从start_kernel到init进程启动
“平安的祝福 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” ini ...
随机推荐
- LeetCode 79. 单词搜索(Word Search)
题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被 ...
- EBS 页面影藏“关于此页”
EBS环境: R12.1.3 问题:要影藏EBS登录页面左下角的“关于此页” 方法: 修改的配置文件参数:FND:诊断 , 由 是 改为 否 个性化自助定义 ,由 是 改为 否参数说明:‘FND:诊断 ...
- leetcode-easy-string-14 Longest Common Prefix
mycode 91.59% class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not str ...
- 选择company回显appname
function showSupCompany() { var obj = {}; obj.label = ScompanyId.getSelectedLabel(); obj.value = Sco ...
- mysql replaceinto VS insertinto
https://blog.csdn.net/t8116189520/article/details/78908975 所以,若想基于插入值累加是不行的,需要insert into https://ww ...
- React之js实现跳转路由
1.新增知识 /* 实现js跳转路由:https://reacttraining.com/react-router/web/example/auth-workflow 1.要引入Redirect im ...
- conftest.py作用范围
前言 一个测试工程下是可以有多个conftest.py的文件,一般在工程根目录放一个conftest.py起到全局作用.在不同的测试子目录也可以放conftest.py,作用范围只在该层级以及以下目录 ...
- 本地虚拟机部署线上php程序---不需要修改数据库信息
1.特别注意:拿来线上php程序后一般是不需要修改config.php里面的数据库连接信息的,如果修改了会报错:站点已关闭.所以 2.5 步骤是需要省略的.如果拿来的是最开始的php源码,需要配置原始 ...
- svn导出项目到myeclipse,运行报ClassNotFoundException
一开始以为是 这样的svn导出项目到myeclipse,运行报ClassNotFoundException 后来不行 又看了一下 还不行 以为是这样的MyEclipse2014报错java.lang ...
- 关于java中设计原则总结(7)
开闭原则: 对于类,模块函数等扩展要开放,对于修改要关闭. 依赖倒置: 接口或抽象是高层,要面向高层编程,不应该面向实现类(实现类是低层)去变成. 单一职责: 对一个类,或者一个功能,只用负责一个职责 ...