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号进程领养