公司动态
Linux 进程管理:状态、优先级与调度核心解析
文章目录1. 进程状态1.1 操作系统中状态的说明1.2 什么叫做阻塞1.3 什么叫挂起2. 具体谈Linux操作系统中的进程状态2.1 Linux 的七种进程状态2.2 僵尸进程Zombie2.3 孤儿进程Orphan3. 进程的优先级3.1 优先级是什么3.2 为什么要有优先级3.3 查看与修改进程优先级1. 进程状态1.1 操作系统中状态的说明运行、阻塞、挂起1.2 什么叫做阻塞从现象入手等待硬件就绪。硬件准备就绪谁最先知道操作系统操作系统就是硬件的管理者先描述再组织。阻塞和运行的本质是看task_struct在谁提供的队列中。Linux中第一个用户态进程是init/systemdPID1。阻塞不止等待硬件还包括等待锁、等待其他进程释放资源等。1.3 什么叫挂起task_struct在内存里因为内存资源不足导致进程对应的数据或者代码被交换到swap分区这种状态叫做挂起。安装操作系统的盘都要留一个分区swap分区用于内存扩展。swap分区和我们的磁盘分区一样只是被隐藏了我们看不见。现在使用内存还要涉及换入和换出。过度swap会导致系统变慢。swap分区存在的本质就是时间换空间。但是swap不建议太大太大会导致依赖swap过度swap会导致分区被占满系统变慢。进程都处于运行状态剩下的还没调度内存不够依旧换入到磁盘空间就会出现运行挂起。如果还是不行Linux OS就会选择性地杀掉一些进程。2. 具体谈Linux操作系统中的进程状态进程状态用位图表示2.1 Linux 的七种进程状态RRunning等同于运行就绪状态。SSleeping可中断休眠浅度睡眠等同于阻塞状态。向进程发送信号也可以杀掉一个进程。kill-9[进程号]-9就是信号的意思。前台进程往往状态后面带加号。前后台进程 – TODOkill -9 发送信号STAT后面带的是前台进程否则是后台进程DDisk SleepLinux特有的状态不可中断休眠深度睡眠和磁盘有关。等待磁盘IO的过程中不可能被OS杀掉只能等磁盘返回信号。什么情况下会遇到D状态进程进行大量的I/O操作时。TStopped暂停状态触发某种信号让其自己暂停下来需要人唤醒。kill-lkill-19[进程号]# 暂停进程kill-18[进程号]# 继续进程后台进程用符号启动前台进程可以从键盘获取输入后台进程没有办法从键盘获取输入。tTracing Stop追踪暂停。gdb调试时父进程向子进程发送信号让子进程暂停运行从而达到逐过程执行的效果。XDead进程死亡OS回收PCB进程彻底消失。2.2 僵尸进程ZombieZZombie僵尸状态。进程创建之初是为了解决问题的当进程退出时只保留进程的task_struct让父进程或OS获取子进程的退出数据。为什么要有Z状态进程退出了退出信息是什么main函数的返回值或收到的信号值进程退出了退出信息保存在哪里进程自己的task_struct结构体中检测Z状态进程回收Z状态进程本质是在做什么获取数据让task_struct转为X并释放掉具体怎样回收谁来回收父进程通过系统调用wait/waitpid由OS来回收如果父进程不回收子进程呢该进程将永远处于Z状态task_struct不会被释放永远占据内核资源空间这种情况就叫做资源泄漏。所以子进程必须被回收new出来的空间如果对应的进程结束了内存泄漏的问题还在吗不在了。用户层申请的内存是归操作系统管理的进程结束时OS会回收所有用户态内存。但是如果进程是常驻进程守护进程它不结束内存泄漏就会持续累积最终可能导致系统OOM内存耗尽。所以常驻进程中必须格外注意内存泄漏问题。有些软件如服务器程序、守护进程是常驻内存的你不退出它就不退出。这种常驻在内存中的进程叫做常驻进程。常驻进程是不结束的所以如果不释放内存就会存在内存泄漏。2.3 孤儿进程Orphan孤儿进程如果父进程先于子进程退出子进程就成为孤儿进程会被系统的init进程PID1或systemd收养由init进程负责回收。3. 进程的优先级3.1 优先级是什么优先级 VS 权限权限决定进程“能不能”获取某种资源如root权限与普通用户权限。优先级在进程已经具备获取资源权限的前提下决定获取该资源的“先后顺序”。调度队列的本质就是确定优先级。3.2 为什么要有优先级CPU是稀缺资源设置优先级是为了决定进程获取CPU等资源的先后顺序从而保证系统的高效运行和关键任务的及时响应。3.3 查看与修改进程优先级通过以下命令可以查看进程的优先级信息ps-l输出结果中的PRI列表示进程的实际优先级NInice值列表示优先级的修正值。nice值的范围-20 ~ 19共40个等级。nice值越小优先级越高nice值越大优先级越低。为什么是这个范围为什么不能随便改这是Linux内核的设计决策既保证了足够的调度粒度又防止普通用户过度抢占系统资源。普通用户只能调大nice值降低自己进程的优先级只有root用户才能将nice值调小到-20提高优先级。进程优先级的变化范围是多少old pri是什么Linux中实际调度优先级 ≈ 基础优先级 nice值。基础优先级通常为80所以实际PRI范围约为 60 ~ 99。old pri指的是进程在被修改之前的旧优先级。高频率修改优先级会导致调度器频繁重新计算和排队增加系统开销。欢迎大家批评指正