init 进程和inittab 引导指令

本文深入探讨Linux内核引导过程中init进程的角色及其如何通过inittab文件配置系统运行级别,从启动到多用户模式切换的全过程。重点介绍了init进程如何依据inittab文件内容建立进程,以及不同运行级别对应的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

init 进程和inittab 引导指令

init 进程是系统所有进程的起点,内核在完成内核引导以后,即在本线程(进程)空间内加载init 程序,它的进程号是1。init 程序读取/etc/inittab 文件作为其行为指针,根据initab 描述文件的内容建立相应的进程。initab 文件中描述了系统默认的运行级别,运行rc 启动脚本,进行用户的登录,X Window 登录等工作。Initab 文件的主体部分如下:
# 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) # id:5:initdefault: # 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 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # 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" # 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 # Run xdm in runlevel 5 x:5:respawn:/etc/X11/prefdm –nodaemon
具体的内容在大多数的Linux书籍中有详细的介绍;开发人员也可以使用man initab命令查看在线帮助手册,下面只作简单介绍:
inittab是以行为单位的描述性(非执行性)文本,每一个指令行都具有以下格式:
id:runlevel:action:process

其中:

  • id 为入口标识符,
  • runlevel 为运行级别,
  • action 为动作代号,
  • process 为具体的执行程序。
id 一般要求4 个字符以内,对于getty 或其他login 程序项,要求id 与tty 的编号相同,否则getty 程序将不能正常工作。runlevel 是init 所处于的运行级别的标识,一般使用0-6 以及S 或s。0、1、6 运行级别被系统保留,0 作为shutdown 动作,1 作为重

启至单用户模式,6 为重启;S 和s 意义相同,表示单用户模式,且无需inittab 文件,因此也不在inittab 中出现,实际上,进入单用户模式时,init 直接在控制台(/dev/console)上运行/sbin/sulogin。在一般的系统实现中,都使用了2、3、4、5 几个级别,在Redhat系统中,2 表示无NFS 支持的多用户模式,3 表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5 表示XDM 图形登录方式。7-9 级别也是可以使用的,传统的Unix 系统没有定义这几个级别。runlevel 可以是并列的多个值,以匹配多个运行级别,对大多数action 来说,仅当runlevel 与当前运行级别匹配成功才会执行。initdefault 是一个特殊的action 值,用于标识缺省的启动级别;当init 由核心激活以后,它将读取inittab 中的initdefault 项,取得其中的runlevel,并作为当前的运行级别。如果没有inittab 文件,或者其中没有initdefault 项,init 将在控制台上请求输入 runlevel。

sysinit、boot、bootwait 等action 将在系统启动时无条件运行,而忽略其中的runlevel,其余的action(不含initdefault)都与某个runlevel 相关。各个action 的定义在inittab 的man 手册中有详细的描述。


下面是对一个initab 文件的简单说明:
id:3:initdefault:
#表示当前缺省运行级别为3--完全多任务模式;
si::sysinit:/etc/rc.d/rc.sysinit
#启动时自动执行/etc/rc.d/rc.sysinit 脚本
l3:3:wait:/etc/rc.d/rc 3
#当运行级别为3 时,以3 为参数运行/etc/rc.d/rc 脚本,init 将等待其返回
0:12345:respawn:/sbin/mingetty tty0
#在1-5 各个级别上以tty0 为参数执行/sbin/mingetty 程序,打开tty0 终端用于
#用户登录,如果进程退出则再次运行mingetty 程序
x:5:respawn:/usr/bin/X11/xdm -nodaemon
#在5 级别上运行xdm 程序,提供xdm 图形方式登录界面,并在退出时重新执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值