首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>linux其它>正文

Debian Linux的init进程初始化工作原理

http://www.oklinux.cn  2006-04-18  来源: oklinux收集整理  恒善喜      会员收藏  游客收藏  【 】 
  init和inittab
  =============
  Linux下为什么会要有个init?用过windows 9.x的人应该知道有个批处理文件autoexec.bat,用过windows NT/2000系统的人应该在控制面板中见过system service工具,它们的目的是相同的。只是比较起来windows下的这些东西功能太弱(当然用法也更简单)。
  init是Linux启动的最后一步,它帮助用户完成每次启动系统都必须完成的一些重复性任务,如加载文件系统、各类网络服务等等程序;它还有一个重要用途,让用户自定义系统运行环境,只启动需要的进程,关闭不用的进程,释放内存和处理器资源,让系统运行得更快更稳。

  init会按任务表执行我们下的命令,这个任务表就是/etc/inittab文件。我们可以为系统制定多个运行环境以满足不同任务的需要,在 inittab中称之为运行等级(runlevel)。例如,计算机要用来完成一种联网编译任务(与其它系统共享CPU周期,合作编译软件),这样情况需占用大量CPU能力和内存,所以当计算机用作这种用途时,其他程序的运行要尽可能少。可设置一个运行等级(如:runlevel 4),把其它程序包括X Window全关闭,只启动联网编译进程;其他时段,你的计算机要与Windows系统共享文件,需要启动Samba,可以再定义一个运行等级(如: runlevel 2)。
  现在当你要进行联网编译时可运行init 4,而不用手工去关闭每个暂不需要的进程;要与Windows系统共享文件可运行init 2。

  Debian系统对某些运行等级进行了预先配置(而且是无法修改的)

  runlevel 0:它的任务就是关闭所有程序,关机。如果计算机及内核支持APM,系统电源可自动切断。

  runlevel 1:为单用户模式保留的。在这个运行等级下,除了一个root shell外,没有其它程序运行。除了root文件系统以只读方式安装外,不安装其它文件系统。该运行等级通常在恢复系统时用。

  runlevel 6:与runlevel 0非常相似,只是它是重启系统而不是关闭系统。

  runlevel 2、3、4、5:Debian系统对它们没有具体规定,通常可自由进行定制,它们都属于多用户模式。其中runlevel 3是Debian使用的默认运行等级。启动Debian系统时,用的就是这个运行等级。

  下面是inittab文件的例子

  # /etc/inittab: init(8) configuration.
  # $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

  # The default runlevel.
  id:2:initdefault:

  # Boot-time system configuration/initialization script.
  # This is run first except when booting in emergency (-b) mode.
  si::sysinit:/etc/init.d/rcS

  # What to do in single-user mode.
  ~~:S:wait:/sbin/sulogin

  # /etc/init.d executes the S and K scripts upon change
  # of runlevel.
  #
  # Runlevel 0 is halt.
  # Runlevel 1 is single-user.
  # Runlevels 2-5 are multi-user.
  # Runlevel 6 is reboot.

  l0:0:wait:/etc/init.d/rc 0
  l1:1:wait:/etc/init.d/rc 1
  l2:2:wait:/etc/init.d/rc 2
  l3:3:wait:/etc/init.d/rc 3
  l4:4:wait:/etc/init.d/rc 4
  l5:5:wait:/etc/init.d/rc 5
  l6:6:wait:/etc/init.d/rc 6
  # Normally not reached, but fallthrough in case of emergency.
  z6:6:respawn:/sbin/sulogin

  # What to do when CTRL-ALT-DEL is pressed.
  ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

  # Action on special keypress (ALT-UpArrow).
  #kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

  # What to do when the power fails/returns.
  pf::powerwait:/etc/init.d/powerfail start
  pn::powerfailnow:/etc/init.d/powerfail now
  po::powerokwait:/etc/init.d/powerfail stop

  # /sbin/getty invocations for the runlevels.
  #
  # The "id" field MUST be the same as the last
  # characters of the device (after "tty").
  #
  # Format:
  # :::
  #
  # Note that on most Debian systems tty7 is used by the X Window System,
  # so if you want to add more getty's go ahead but skip tty7 if you run X.
  #
  1:2345:respawn:/sbin/getty 38400 tty1
  2:23:respawn:/sbin/getty 38400 tty2
  3:23:respawn:/sbin/getty 38400 tty3
  4:23:respawn:/sbin/getty 38400 tty4
  5:23:respawn:/sbin/getty 38400 tty5
  6:23:respawn:/sbin/getty 38400 tty6

  # Example how to put a getty on a serial line (for a terminal)
  #
  #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
  #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

  # Example how to put a getty on a modem line.
  #
  #T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

  该文件有一个基本类型的指令,它们指定命令行,命令行所采取的动作,在何种运行等级下激活命令。这引起命令行的格式大体如下:

  id:runlevels:action:command

  id是任意一个名称(具体是什么并不重要),runlevels是一个数字串(代表运行等级),action描述何时执行命令,command指定执行的实际命令。拿启动getty的命令行举例:

  1:2345:respawn:/sbin/getty 38400 tty1

  该命令告诉init,它应该在引导后以运行等级2-5运行命令/sbin/getty 38400 tty1。动作标记respawn表示命令在退出时重新运行(当用户在shell输入exit的时候)。

  从方面的文件中可以看到,运行等级2和3有六个活动的gettys,而等级4和5只有一个。假设运行等级4下有三个shell运行在虚拟控制台。你在ID为2和3的命令行的运行等级字段添加了数字4,也就是说你将

  2:23:respawn:/sbin/getty 38400 tty2
  3:23:respawn:/sbin/getty 38400 tty3

  替换成

  2:234:respawn:/sbin/getty 38400 tty2
  3:234:respawn:/sbin/getty 38400 tty3

  然后重启或执行以下命令:

  telinit q

  对inittab进行修改。telinit q命令指示init重新加载它的配置。参阅telinit(8)。

  /etc/inittab的其它行看起来比较复杂,我们先看看还有哪些动作标记:

  ·respawn:启动命令并监视命令的执行,当进程退出时,再次执行该命令(通常用于虚拟终端设备上的登录提示)。 ·wait:进入指定运行等级时,启动进程。init会停下来,直到执行完成。这个标记用于设置特定等级下软件的启动。
  ·once:进入指定的任一运行等级时,启动一次进程。
  ·boot:该命令在系统引导时运行。这种类型的指令忽略运行等级。
  ·bootwait:该命令在系统引导时运行,init等到它退出后才能继续做别的事。
  ·off:禁用所有运行等级下的某个命令。
  ·initdefault:这种类型的项指定在系统引导时进入哪个运行等级。
  ·powerwait:这类指令给出在电源不足时需要执行的命令。init直到进程完成后才继续工作。
  ·powerfail:与powerwait类似,但init不等待进程完成。
  ·powerworkwait:电源正常后执行。init暂停,直到进程结束。
  ·powerfailnow:当便携机电池或外部UPS电池电量不足时执行。
  ·ctrlaltdel:指定init在捕获ctrl+alt+del组合键时执行的命令。
  ·kbdrequest:把特殊动作映射到特定的按键。Debian中的是alt+UpArrow。

  现在再看上面的文件是不是清楚了许多?

  更强大的sysvinit
  ================
  inittab的主要功能是描述引导及正常操作时,应该在何种运行等级下启动什么程序,每个运行等级的具体项目完全可以通常/etc/inittab来定义,但Debian有一个更健壮的方案sysvinit,它被认为是init最强大的应用程序之一。Debian组织inittab的方式是把运行等级的大部分定义从inittab中移出来,移到一个脚本层次中去。惟一直接从inittab启动的程序只有getty,它用于虚拟设备上启动登录提示符,保留它因为它们要求特殊处理,在inittab之外处理要困难得多。

  inittab来启动所有软件当然是可能的,但将所有配置写在同一个文件既不方便查看也不方便维护,所以文件里会加上这许多行:

  l0:0:wait:/etc/init.d/rc 0
  l1:1:wait:/etc/init.d/rc 1
  l2:2:wait:/etc/init.d/rc 2
  l3:3:wait:/etc/init.d/rc 3
  l4:4:wait:/etc/init.d/rc 4
  l5:5:wait:/etc/init.d/rc 5
  l6:6:wait:/etc/init.d/rc 6

  这些行实际决定了系统在各个运行等级下的行为。它们如何做到的也许并不明显,但至少我们知道主要意思:首先每行都有个符号ID lx,lx表示runlevel x;其次,每行只在一个运行等级下激活,该运行等级对应着符号ID中的数字x。命令执行时,init停下来,直到进程结束。最后,每个命令行调用一个脚本 /etc/init.d/rc x,这里x代表当前运行等级的数字。显然各运行等级的具体任务在/etc/init.d/rc脚本中安排。

上一篇:在Debian Linux中网卡的设置   下一篇:Debian Linux下如何设置一个程序的开机自动行


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Debian Linux下如何设置一个程序的开机自动行
·在Debian Linux中网卡的设置
·构建Debian Linux的精彩世界
·Debian Linux下安装永中office
·debian Linux--完美桌面应用
·debian Linux下制作deb包的简便方法
·Debian使用小技巧
·debian Linux之webmin
·在Linux(Debian)下安装mono
·定制Ubuntu安装CD
·Cosix linux3.1[发行版]美化方案
·debian Linux 下 Cedega 使用指南
·Debian Linux下如何安装软件
·TurboLinux 10软件指南
·Debian的软件包管家:dselect用法小结
·debian挂载光驱、软驱、usb
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Fedora Linux下运行PS2模拟器
·ARM、DSP、FPGA的技术特点和区别是什么
·从我做起,10件可以帮助开源的事
·介绍Linux系统下的几个小游戏模拟器
·了解 Linux Kudzu服务的作用
·Linux操作系统上到底提供了哪些基本软
·Ubuntu下两个项目管理工具:Dia和Plann
·UNIX的分支 服务器上的FreeBSD系统
·Ubuntu下用多个Sources.list文件加速AP
·Linux下各种主要文件系统的读写性能测
·内核循环缓冲区数据结构在用户态的使用
·移植Uboot到ARMer9开发系统上
  阅读排行
·配置ubuntu上网问题
·debian Linux 下 Cedega 使用指南
·SuSE Linux安装后的初步设置
·移植Uboot到ARMer9开发系统上
·ubuntu dapper下解决依赖关系安装opera
·ubuntu中的快捷方式
·解决ubuntu 6.06不能保存DNS地址的问题
·debian Linux下制作deb包的简便方法
·GNU EMACS字体设置,基本上可以随心所
·ubuntu下安装软件的几种方法
·在ubuntu下修改网卡地址
·Linux下使用FrameBuffer直接写屏
·Linux下各种主要文件系统的读写性能测
·Kirin原创的eclipse editor配色方案
·debian里面开启dma功能,提高硬盘读写速
网摘收藏: