0.同一系列索引进程和进程组各种进程一个进程的演化1.进程组的具体介绍可以参考进程和进程组的概念如ngixnphp-fpm终止主进程,相关子进程全部关闭。2.前台进程和后台进程2.1两者的区别。前台进程是运行在终端当前窗口的进程组。后台命令放在前台3.守护进程3.1什么是守护进程文字描述可能有点抽象,我们来看下服务器中的守护进程3.2守护进程从上图可以看出我们日常php-fpm服务一直在运行守护进程在后台运行,等待分配运行。还有我们的swoole服务。还有就是我们的内核服务,一直在守护者操作系统中正常运行。PS:-1表示不关联任何终端,通常是守护进程。系统服务进程的总称会包含d3.3守护进程的应用。为了比较,守护进程和后台进程的区别。守护进程已经完全脱离了终端的控制。后台进程并没有完全分离,它的一些输出信息会在终端关闭时输出到终端,后台进程将终止,守护进程将继续。例如,nginx或系统进程守护进程没有独立的会话、文件描述符和工作目录。后台进程继承自父进程。3.4daemon进程的启动一般在系统开机时启动。4.僵尸进程4.1父进程与子进程的关系。联系。父进程---(fork)----子进程:执行任务父进程---(wait)----子进程:释放资源简单来说:父进程使用fork创建子进程,子进程在调度器中调度调度运行不同的子进程子进程运行完毕退出后(父进程等待之前),内核会自动释放相关资源释放占用的内存,打开的文件还保留一定的信息:进程ID、退出状态和运行时间。(有些状态是子进程独有的)父进程调用wait获取子进程的退出状态,释放最后一个资源。所以如果子进程退出了,但是父进程没有调用wait,子进程的进程ID等特殊资源不会立即释放,这些就变成了僵尸进程。4.2Zombieprocess僵尸进程:子进程exit退出。如果父进程没有调用wait来获取子进程的状态,那么子进程的相关资源仍然保存在系统中。死进程会占用PID等资源。如果系统中存在大量死进程,则会影响fork子进程。PS:想想看,同时运行多个脚本,子进程退出了,但是PID没有释放,进程资源优先。新任务无法派生出新的子进程ID。当然,系统会进行清理。4.3一个demo5.孤儿进程5.1什么是孤儿进程Orphan:很容易理解,没有父亲就是孤儿。同一个孤儿进程是找不到父进程的子进程。如果在子进程执行过程中父进程先退出,子进程就会被init进程托管,那么这个子进程就是孤儿进程。5.2孤儿进程的demo是通过休眠时间来控制的。子进程执行过程中,父进程提前退出检查输出结果。父进程充当父进程。父进程的PID:为1637:新贵进程。经过进一步研究,我们发现新贵进程上有很多进程是托管在不同系统上的。接管的父进程不一样,这跟具体进程0的演化有关。我们先来看看虚拟终端页面和控制台页面接管父进程的虚拟终端图形界面:具体原因因为这个区别需要从1号流程的输出来详细解释。6.0号流程和1号流程6.1一切的起源:0号流程是关于1号流程和2号流程.后面我们慢慢讲解。从上图我们可以知道0号进程是一切的开始,它以boot开始,他是唯一没有被fork产生的进程。在内核启动过程中,会通过start_kernel依次初始化内核的各种模型、组件、进程等。下图:是start_kernel的主要工作概览在空闲进程0初始化后,start_kernel会完成很多初始化工作。最后一步包括:rest_init:rest_init会调用init_task,init_task会调用kernel_threadkernel_thread会创建init进程和ktheadd内核线程init_task:最终会演变成进程0idle6.2从0到1用户进程的创建请参考进程ofaprocessEvolution100.Tribute如果不知道,请参考王老师的精彩讲解在学习的过程中,我获得了极大的满足感,把之前的一些东西联系到了一起。非常感谢王立涛老师在此表达我的谢意。PS:本文所有资源和图片均来自视频
