http://oss.org.cn/kernel-book/ch13/13.6.1.htm

init进程的建立

Linux将要建立的第一个进程是init进程,建立该进程是以调用kernel_thread(init ,NULL,0)这个函数的形式进行的。init进程是很特殊的——它是Linux的第一个进程,也是其它所有进程的父进程。让我们来看一下它是怎样产生的。

在调用kernel_thread(init,NULL,0)函数时,会调用main.c中的另外一个函数——init()。请注意init()函数和init进程是不同的概念。通过执行inin()函数,系统完成了下述的工作:

·建立dbflush、kswapd两个新的内核线程。

·初始化tty1设备。该设备对应了多个终端(concole),用户登录时,就是登录在这些终端上的。

·启动init进程。Linux首先寻找“/etc/init”文件,如果找不到,就接着找“/bin/init”文件,若仍找不到,再去找“/sbin/init”。如果仍无法找到的话,启动将无法进行下去。否则,便执行init文件,从而建立init进程。

当etc/init(假定它存在)执行时,建立好的init进程将根据启动脚本文件的内容创建其它必要的进程去完成一些重要的操作:

(1) 文件系统检查。

(2) 启动系统的守护进程。

(3) 对每个联机终端建立一个“getty”进程。

(4) 执行“/etc/rc”下的命令文件。

此后,“getty”会在每个终端上显示“login”提示符,以等待用户的登录。此时“getty”会调用“exec”执行“login”程序,“login”将核对用户帐户和密码,如果密码正确,“login”调用“exec”执行shell的命令行解释程序(当然,也可以执行X-windows,如果用户设置了的话)。shell接着去执行用户默认的系统环境配置脚本文件(通常是用户的home目录下的profile文件)。

init还有另外一个任务,当某个终端或虚拟控制台上的用户注销之后,init 进程要为该终端或虚拟控制台重新启动一个 “getty”,以便能够让其他用户登录。这是为什么呢?你应该发现,当用户登录时,“getty”用的是“exec”而不是“fork”系统调用来执行“login”,这样,“login”在执行的时候会覆盖“getty”的执行环境。(同理,用户注册成功后,“login”的执行环境也会被shell占用)所以,如果想再次使用同一终端,必须再启动一个“getty”。

此外,init 进程还负责管理系统中的“孤儿”进程。如果某个进程创建子进程之后,在子进程终止之前终止,则子进程成为孤儿进程。init 进程负责“收养”该进程,即孤儿进程会立即成为 init 进程的子进程。这是为了保持进程树的完整性。

init 进程的变种较多,大多数 Linux 的发行版本采用 sysvinit(由 Miquel van Smoorenburg)。这是一个编译好的软件包。由于 System V 而得名。UNIX 的 BSD 版本有不同的 init,主要区别在于是否具有运行级别(关于运行级别的问题下面会有专门的描述):System V 有运行级别,而 BSD 没有运行级别。但这种区别并不是本质的区别。

图5.12是上述流程的流程图。

图5.12   init进程的启动流程

Linux init进程学习 转的更多相关文章

  1. init进程学习

    linux的init进程 一个在线编辑markdown文档的编辑器,是内核启动的第一个进程,init进程有很多重要的任务,它的pit 为1,在linux shell中使用pstree命令可以看到它为其 ...

  2. Linux init进程详解

    init模块 一般来说,Linux程序只能用另一个Linux程序启动.例如,登录Linux终端程序Mingetty. 但终端程序又由谁启动呢?在计算机上启动Linux时,内核装入并启动init程序. ...

  3. .NET跨平台实践:用C#开发Linux守护进程

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  4. .NET跨平台实践:用C#开发Linux守护进程(转)

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  5. C#开发Linux守护进程

    用C#开发Linux守护进程   Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon ...

  6. .NET跨平台实践:用C#开发Linux守护进程-Daemon

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  7. Linux进程学习(孤儿进程和守护进程)

    孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如 ...

  8. Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度(六)

    前面我们了解到了0号进程是系统所有进程的先祖, 它的进程描述符init_task是内核静态创建的, 而它在进行初始化的时候, 通过kernel_thread的方式创建了两个内核线程,分别是kernel ...

  9. Linux进程学习 - 孤儿进程和守护进程

    孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如 ...

随机推荐

  1. ofstream的使用方法--超级精细。C++文件写入、读出函数(转)

    ofstream的使用方法ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;  在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的, ...

  2. laravel中的自定义函数的加载和第三方扩展库加载

    l 1. 创建文件 app/Helpers/functions.php <?php // 示例函数 function foo() { return "foo"; } 2. 修 ...

  3. Android -- ADT变化&aar&Lint

    Switch Case switch case 常用的使用方法: switch(v.getId()){ case R.id.btn1: doClick1(); break; } 在ADT中的改变 在正 ...

  4. Java信号量Semaphore

    Semaphore Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得. Semaphore实现的功能就类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少 ...

  5. 【Spark】Spark-reduceByKey-深入理解

    Spark-reduceByKey-深入理解 spark.apache.org_百度搜索 Apache Spark™ - Lightning-Fast Cluster Computing reduce ...

  6. php学习笔记之动态生成一组单选button

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 优化MySQL开启skip-name-resolve参数时显示“ignored in --skip-name-resolve mode.”Warning解决方法

    转自:http://blog.csdn.net/yiluoak_47/article/details/53381282 参数用途: skip-name-resolve #禁止MySQL对外部连接进行D ...

  8. activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含

    Number Of Consumers  消费者 这个是消费者端的消费者数量 Number Of Pending Messages 等待消费的消息 这个是当前未出队列的数量.可以理解为总接收数-总出队 ...

  9. 转-为什么Lisp语言如此先进?(译文)

    之前在看黑客与画家的时候看过,今天重温,完全不一样的感觉! 原文地址:http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html ...

  10. Windows 之 可以Ping通服务器但无法使用服务器连接的共享打印机

    故障现象:一个公司内部局域网中,一台电脑可以Ping通服务器,但无法使用服务器连接的共享打印机. 故障分析与排除:根据故障现象分析,由于客户端可以Ping通服务器,说明网络连接正常,故障可能是由客户端 ...