【学习笔记】3. 一个进程的演变

0. 同系列索引

  1. 进程与进程组
  2. 各类不一样的进程
  3. 一个进程的演变

1. init进程

1.1 1号进程的建立

内核态建立进程使用 kernel_thread ,用户态建立进程使用 fork

kernel_thread 会建立 init 进程 和 ktheadd 内核线程就是常说的 1号进程和2号进程html

  • 1号进程是全部进程的祖先 : 用户空间,
  • 2号进程 负责管理内核中的进程 : 内核空间

这二个进程维护系统的全部进程shell

此时1号进程仍是在内核空间。
execve 函数把控制器从内核空间切换到用户空间。
经过加装用户空间的应用程序(exec 加装应用文件),而后 kernel_thread 建立的init进程,就变成了用户空间的第一个进程segmentfault

clipboard.png
图:能够看出 1号进程和2号进程的父子关系bash

clipboard.png
图:全部进程的父进程,起源都是1号进程和2号进程。并发

1.2 1号进程作了什么?

clipboard.png

1号进程到了用户态以后,作了什么: 完成各类初始化函数

clipboard.png

1.3 1号进程的特征

clipboard.png

  • 用户空间的全部进程都是init进程fork产生的
  • init进程会转换为守护进程

2. 进程的init 过程

  1. 0号进程
  2. init内核进程
  3. 1号init用户进程
  4. getty进程
  5. shell 进程

前面的部分已经介绍了 1-3 步骤
第四步:1号进程fork一个子进程,启动getty。 若是用户登陆了,就会启动一个login进程,验证登陆。学习

因此没有登陆,没有到第四步的终端,以下图spa

clipboard.png

第五步:启动一个bash进程,在bash里面运行shell命令线程

clipboard.png

3. init 进程的演变

这个特别须要记住

clipboard.png

上面集中是 init 服务进程的演变,各有优缺点。code

由于平常不会再想init彻底过程那样了,在虚拟终端和伪终端,使用了不一样的演变方式。
好比 sysvinit 经过加载 init.d 文件。
好比咱们在上面的介绍中,托管子进程是 upstart。它能够并发运行。
虚拟终端中使用的是 :systemd。(广为使用的)

咱们在了解的时候,不是靠记忆,而是知道它的原理,而后理解就能够了。

100. 致敬

若有不详,请参考王老师的精彩讲解
学习过程当中,得到了极大的知足感,把以前的一些东西串联了起来。十分感谢 王利涛老师在此表示感谢。PS:本文中全部的资源和图片均来自视频中

相关文章
相关标签/搜索