0. 同系列索引
1. init进程
1.1 1号进程的创建
内核态创建进程使用kernel_thread
,用户态创建进程使用fork
kernel_thread
会创建 init 进程 和 ktheadd 内核线程就是常说的 1号进程和2号进程
- 1号进程是所有进程的祖先 : 用户空间,
- 2号进程 负责管理内核中的进程 : 内核空间。
这二个进程维护系统的所有进程
此时1号进程还是在内核空间。execve
函数把控制器从内核空间切换到用户空间。
通过加装用户空间的应用程序(exec 加装应用文件),然后 kernel_thread
创建的init
进程,就变成了用户空间的第一个进程。
图:可以看出 1号进程和2号进程的父子关系
图:所有进程的父进程,起源都是1号进程和2号进程。
1.2 1号进程做了什么?
1号进程到了用户态之后,做了什么: 完成各种初始化
1.3 1号进程的特征
- 用户空间的所有进程都是
init
进程fork
产生的 -
init
进程会转换为守护进程
2. 进程的init 过程
- 0号进程
- init内核进程
- 1号init用户进程
- getty进程
- shell 进程
前面的部分已经介绍了 1-3 步骤
第四步:1号进程fork一个子进程,启动getty。 如果用户登录了,就会启动一个login进程,验证登录。
所以没有登录,没有到第四步的终端,如下图
第五步:启动一个bash进程,在bash里面运行shell命令
3. init 进程的演变
这个特别需要记住
上面集中是 init 服务进程的演变,各有优缺点。
因为日常不会再想init完全过程那样了,在虚拟终端和伪终端,使用了不同的演变方式。
比如 sysvinit
通过加载 init.d
文件。
比如我们在上面的介绍中,托管子进程是 upstart。它可以并发运行。
虚拟终端中使用的是 :systemd。(广为使用的)
我们在了解的时候,不是靠记忆,而是知道它的原理,然后理解就可以了。
100. 致敬
如有不详,请参考王老师的精彩讲解
学习过程中,获得了极大的满足感,把之前的一些东西串联了起来。十分感谢 王利涛老师
在此表示感谢。
PS:本文中所有的资源和图片均来自视频中
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。