`
fly_sky_why
  • 浏览: 7769 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
ubuntu从6.10开始逐步用upstart代替原来的sysinit,进行服务进程的管理。也正是从6.10开始,ubuntu的启动过程开始变得有点“变幻莫测”。也没办法,这是正在开发中的upstart不可避免的。为了对原有的init实现向后兼容,upstart可以说是在表象上保留了大部分原来init的特性,因而目前linux初始化进程名仍然叫init,而改变的核心,乃是Event机制。理解并讲清楚这个改变的重要意义和内在机理可不是件容易的事,所以我只打算研究一下目前upstart(0.3.9, ubuntu 8.04)在系统启动中的表象行为。[注:据Scott James Remnant在其博客上所说,upstart 0.5.0版本将在未来几周发布。]

关于系统启动,熟悉Linux的人大多应该知道,init进程(PID=1)乃是所有进程的父进程,所有进程由它控制。init进程的运行时间是内核完成文件系统的加载后。那么init进程是如何开启系统中的其它进程的呢?在阐述这个问题之前,大致地说明一下目前ubuntu中与init相关的几个目录和应用程序,可以方便后面的论述。这些目录和程序包括:
init
telinit
runlevel
/etc/event.d/
/etc/init.d/
/etc/rcX.d/
前三个是应用程序(注意哦,它们都不是shell脚本),可以理解为是由内核调用的。关于它们的功能,从manpage查看就可以了。我们的重点是后面给出的三个目录。

首先是/etc/event.d/目录,这是upstart的核心,upstart不同于原有的init的地方就在于它引入了event机制。Event机制通俗的讲就是将所有进程的触发、停止等等都看作event(事件)。/etc/event.d/中就存放了目前upstart需要识别的event。这其中主要有三种rc-default, rcX(x=0,1,...6,S)以及ttyX。这rc-default就类似于那大名鼎鼎的inittab文件,它就是设置默认运行级别的[注:upstart中实际并没有运行级别的概念,这么称呼是为了init向后的兼容性]。现在你应该知道了ubuntu里没有了inittab文件后该到哪里设置默认运行级别的了吧!cat rc-default一下吧!rcX文件是发生相应运行级别事件(可以注意到event这个词在upstart里真是无处不见啊)时,需要运行程序的脚本,而ttyX则是设置伪终端数目的,也就是你Ctrl+Alt+F(1~6)调出的那个Console。我们以rc2为例,cat rc2:
start on runlevel 2
stop on runlevel [!2]
console output
script
        set $(runlevel --set 2 || true)
        if [ "$1" != "unknown" ]; then
            PREVLEVEL=$1
            RUNLEVEL=$2
            export PREVLEVEL RUNLEVEL
        fi
    exec /etc/init.d/rc 2
end script

不去考虑细节,只要注意到前两行和倒数第二行就可以了。可以看到,rc2文件是定义在发生运行级别2的时候所要执行的东西,核心就是这句:exec /etc/init.d/rc 2。这样,我们就可以自然地过渡到下一个重要的目录,/etc/init.d/了。

你可以ls /etc/init.d/看一下里面的内容,对它有个大致的了解。/etc/init.d/中存放的是服务(services)或者任务(tasks)的执行脚本。可以这么说,只要你安装了一个程序(特别是服务程序daemon),它可以在系统启动的时候运行,那么它必定会在/etc/init.d/中有一个脚本文件。我们还回到上面的rc2文件,它执行了一个exec /etc/init.d/rc 2的命令。也就是说,给/etc/init.d/rc脚本传递了一个参数"2",让它执行。我们仔细查看一下rc脚本(很长,耐心点),能看到这样的一段:
# Now run the START scripts for this runlevel.
# Run all scripts with the same level in parallel
.......
for s in /etc/rc$runlevel.d/S*
.......
这说明,当给rc脚本传递一个数字参数"X"的时候,它在经过一系列的设置后,将会开始执行/etc/rcX.d/下S开头的脚本。这就过渡到下一个目录/etc/rcX.d/了。

进入/etc/rcX.d/,ls -l /etc/rcX.d/看看有些什么内容?哈哈,没错,都是一些到/etc/init.d/中脚本的符号链接。不同的是它们的开头加上了S和一个数字。熟悉原本init的人应该知道,S表示在启动时运行,数字则表示执行的先后顺序。

这样一来,upstart管理的ubuntu启动过程应该就清楚了。梳理一下:
1,内核启动init
2,init找到/etc/event.d/rc-default文件,确定默认的运行级别(X)
3,触发相应的runlevel事件,开始运行/etc/event.d/rcX
4,rcX运行/etc/init.d/rc,传入参数X
5,/etc/init.d/rc脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本
6,/etc/rcX.d/中的脚本按事先设定的优先级依次启动,直至最后给出登录画面(启动X服务器和GDM)

理解了这些,手动配置开机服务的启动与否就很简单了。Ubutnu默认的启动级别是2,不想启动的程序,只要把相应的符号链接从/etc/rc2.d/中删去即可!
分享到:
评论

相关推荐

    最简洁方便制作ubuntu启动盘的方法

    ### 最简洁方便制作 Ubuntu ...总结来说,通过本篇文章介绍的方法,您可以轻松高效地完成 Ubuntu 启动盘的制作,为安装过程打下坚实的基础。无论您是初学者还是有一定经验的 Linux 用户,这些步骤都将对您有所帮助。

    从硬盘启动引导ISO映像物理安装Ubuntu的全过程

    ### 从硬盘启动引导ISO映像物理安装Ubuntu的全过程 #### 重要知识点解析: ##### 1. 安装背景与目的 - **安装背景**:本文介绍了一个典型的上网本安装Ubuntu Linux的操作流程。该上网本配置如下:硬盘分为C、D两个...

    ubuntu U盘启动制作工具.rar

    使用Rufus创建Ubuntu启动盘的步骤大致如下: 1. **下载Rufus**:从官方网站或者在这个压缩包中找到rufus-3.5.exe并运行。 2. **连接U盘**:将空白的USB驱动器插入电脑的USB接口。 3. **选择设备**:在Rufus程序中,...

    Win10与Ubuntu双系统开机不能进入Ubuntu的问题

    1. 获取Ubuntu启动盘:你可以使用Ubuntu官方提供的工具制作启动盘,或者在Windows环境下使用工具刻录启动U盘。 2. 使用U盘启动计算机:将计算机启动顺序设置为从U盘启动,并选择“试用Ubuntu”选项。 3. 更新系统...

    UCK定制Ubuntu简单过程

    ### UCK定制Ubuntu简单过程详解 #### 一、前言 在本文中,我们将详细介绍如何使用UCK (Ubuntu Customization Kit) 来定制自己的Ubuntu系统。通过这种方法,你可以轻松地为Ubuntu光盘添加自定义的软件或者进行其他...

    startx启动过程分析

    "Startx 启动过程分析" 在Ubuntu 8.04中,startx脚本是一个非常...startx启动过程是Ubuntu 8.04中的一個关键组件,负责启动X窗口系统并加载桌面环境。了解startx启动过程对于 Linux 系统管理员和开发者来说非常重要。

    ubuntu引导修复—使用LiveCD更新UbuntuGrub引导

    3. Ubuntu引导修复:Ubuntu引导修复是指在Ubuntu系统无法启动或引导加载程序损坏的情况下,使用Live CD来修复Ubuntu引导的过程。 4. 使用LiveCD更新UbuntuGrub引导的步骤:步骤如下: * 使用启动USB进入Ubuntu试用...

    Ubuntu21.10的efi引导文件

    总结来说,Ubuntu 21.10的EFI引导文件涉及了EFI启动流程、GRUB引导加载器、Secure Boot机制等多个关键概念,理解这些文件的作用和用途对于管理和维护Ubuntu系统至关重要。正确配置和使用这些文件能够帮助用户解决...

    grub命令-Ubuntu启动

    ### GRUB命令详解:掌握Ubuntu启动管理的核心技能 在Linux操作系统中,GRUB(Grand Unified Bootloader)作为一款强大的引导加载程序,对于系统的启动过程起着至关重要的作用。本文将深入探讨GRUB命令的使用方法...

    Ubuntu安装过程之磁盘分区.pdf

    ### Ubuntu安装过程中的磁盘分区详解 #### 一、引言 随着Linux系统的普及与应用,越来越多的人开始尝试安装Ubuntu操作系统。在安装过程中,磁盘分区是一个非常关键的步骤,它直接影响到系统的稳定性和数据的安全性...

    Ubuntu 9.04 安装过程札记

    总结一下,Ubuntu 9.04的安装流程包括创建安装媒介、选择语言和键盘布局、分区、设置用户账户以及启动系统。在使用过程中,SSH远程访问和源码安装是两个重要的技术点。SSH使得远程管理更加便捷,源码安装则为开发者...

    Ubuntu操作系统U盘启动盘

    在Windows环境下通过UltraISO工具来制作Ubuntu启动U盘,是一种常见的且便捷的方式。本文将详细介绍如何在Windows系统下,使用UltraISO工具制作一个Ubuntu 14.04的U盘启动盘。 #### 二、准备工作 在正式开始制作前,...

    嵌入式系统/ARM技术中的Ubuntu系统启动过程详解

    总结来说,Ubuntu的启动过程与传统的Linux发行版有所不同,通过`upstart`的事件驱动机制实现了更高效的系统初始化和服务管理。对于嵌入式系统开发者和ARM平台工程师来说,深入理解这一启动流程对于优化系统性能、...

    Windows7系统下利用U盘安装Ubuntu_12.04实现双系统详细教程

    ### Windows7系统下利用U盘安装Ubuntu_12.04实现双系统详细教程 ...整个过程中涉及的步骤包括Ubuntu镜像下载、U盘启动盘制作、硬盘分区及Ubuntu安装配置等关键环节,旨在帮助用户顺利完成双系统环境搭建。

    ubuntu安装google输入法

    ### Ubuntu安装Google输入法详细教程 #### 一、前言 在Ubuntu系统中,很多用户习惯使用自己熟悉的输入法来进行日常的文字输入工作。...如果您在安装过程中遇到任何问题,欢迎随时提问,我们将尽力为您解答。

    在虚拟机上安装Ubuntu过程图解

    ### 在虚拟机上安装Ubuntu过程图解 #### 一、准备工作 在开始安装Ubuntu之前,首先需要准备必要的软件和文件。本教程将介绍如何在VMware Workstation 8上安装Ubuntu Desktop 10.04版本。确保您的主机系统已安装...

    Ubuntu设置1920*1080

    本文将详细介绍如何在Ubuntu系统中设置1920*1080分辨率的过程。 #### 一、了解Ubuntu中的分辨率设置原理 在Ubuntu中,分辨率的调整主要通过X Window System来实现。X Window System是一套用于显示图形界面的系统,...

    Mini.iso 安装ubuntu

    如果网络出现问题,可能需要重新启动安装过程。 3. **软件源选择**:选择一个速度快且可靠的软件源非常重要。建议选择官方提供的软件源,如 TW (台湾) 官方源,确保软件包下载速度快且稳定。 4. **自定义安装选项*...

Global site tag (gtag.js) - Google Analytics