init进程 && 0号进程和1号进程的前世今生

本文解析了Linux中1号进程(init)的起源,进程树结构,以及它与0号进程的关系。特别强调了init进程从内核态到用户态的转变,并澄清了与pstree命令观察到的差异。还涵盖了进程创建的过程和孤儿进程的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

init进程就是我们常说的1号进程。

说到1号进程,就不得不说一下1号进程的前世今生!!!
Linux操作系统允许一个进程去创建新进程,新进程就是子进程,从而形成了进程树的结构模型
这棵大树的树根是系统自动构造的,就是内核态下执行的0号进程,0号进程是所有进程的祖先!!
有些同学会说 那我用过pstree命令看到的树根明明是1号init进程啊。
其实这个问题很简单,咱们使用pstree去查看进程树,咱们是处在用户态去看进程,而0号进程是一个内核态进程。就像一颗大树,你能看见的只是树长在地上的东西,地底下的树根是看不见的。而1号进程就是在地上树的最底部,而0号进程是地下的树根。
整个进程创建的过程:0号进程->1号内核进程->1号用户进程(init进程)->getty进程->shell进程
我给大家画了一幅图,这幅图可以很好的让你明白这个过程。
在这里插入图片描述

注意:
1号内核进程调用执行init函数演变成1号用户态进程(init进程),这里前者是init是函数,后者是进程。
两者容易混淆,区别如下:
1.init()函数在内核态运行,是内核代码
2.init进程是内核启动并运行的第一个用户进程,运行在用户态下。
3.一号内核进程调用execve()从文件/etc/inittab中加载执行init函数,这个过程并没有使用调用do_fork(),因此两个进程都是1号进程。
4.孤儿进程被1号进程领养

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值