OS 调度哪个进程(或者说给哪个进程分配资源),都是有依据的

这里的依据就是今天要说的两个东西

1、进程状态 :哪个进程适合运行(如,休眠的进程不需要分配资源!)

2、进程优先级:哪个进程优先运行


目录

一、进程状态

1、事件发生的几种状态

2、进程的状态分类

(1) R 运行状态

(2) S 睡眠状态

(3) D 磁盘休眠状态

(4) T 停止状态

(5) X 死亡状态

3、进程的异常状态

(1) 僵尸进程

(2) 孤儿进程

(3) 僵尸进程的危害

二、进程优先级

1、优先级的概念

2、Linux系统中的优先级

3、修改nice值


一、进程状态

查看进程状态:ps ajx    

1、事件发生的几种状态

(1) 就绪态

处在运行队列中,但是不在运行的进程

(2) 运行态

处在运行队列中,同时在运行中的进程

运行队列中每个进程都会有自己的时间片,

时间片结束后,若进程未运行完,自动排到队尾,让下一个进程运行;若进程运行完了,则从运行队列中剥离

详情可以参考进程(一)—— 进程的创建和程序的运行过程_abs(ln(1+NaN))的博客-CSDN博客

(3) 等待态

处在等待队列中的进程:可以看作是等待态

问:什么是等待队列??

答:程序中的用户输入、死循环等,占用了CPU资源,但是没有干任何有意义的事,这个时候,OS会把这些进程丢到等待队列中,等需要用到CPU资源的时候,再加入到运行队列中

运行队列 ——> 等待队列:当CPU 中某个进程需要等待输入时,CPU会把这个进程丢到等待队列

(这个过程叫“挂起”)

等待对垒 ——>运行队列:当 等待队列中的 进程,可以读取键盘输入时,状态修改为 R,进入到

CPU 的运行队列

(这个过程叫“唤醒”)

进程状态的分类大致可以分为这三种,但这三种还能继续细分

2、进程的状态分类

(1) R 运行状态

表示当前进程在运行队列中或者正在运行

(2) S 睡眠状态

进程在等待事件的完成,可以归为等待状态的一类(该状态可以被中断,然后切换到其他状态)

(3) D 磁盘休眠状态

也叫做“ 深度睡眠状态 ”(该状态下的进程无法被立即中止,即便是OS也无法中止该进程)

为什么会存在这种状态呢??

下面举个例子

假设某个进程在向磁盘传输数据,这个时候,OS路过,发现进程在休眠,于是该进程被kill了

磁盘存好数据以后,发现进程没了,数据传输的结果不知道应该给谁?

这个时候是谁的问题? OS ?进程 ?

为了避免OS误杀,如果进程处于D状态,OS也无法中止这个进程,只能等待IO结束

(4) T 停止状态

发送SIGSTOP信号给进程来停止进程,暂停的进程可以发送SIGCONT信号让进程继续运行

kill -l:查找暂停信号

kill -19  进程pid:给pid为xxx的进程发送暂停命令
(19号是暂停信号)

kill -9 进程pid :如果Ctrl+C无法杀掉进程,可以通过这个指令杀掉

(5) X 死亡状态

这个状态只是一个返回状态,无法在任务列表中观察到

3、进程的异常状态

上述所说的,都是进程的正常状态,但是存在两种异常状态,会对内存造成影响

(1) 僵尸进程

僵尸可以理解为僵化的尸体,僵化的尸体不作处理,就会危害到周围环境

什么时候会出现僵尸进程呢?

原本子进程运行完,会进入“死亡”状态,需要父进程回收(获取子进程的退出码)

但是!!此时父进程在忙自己的事,子进程“死亡”以后,无人回收,一直在占用资源

此时的子进程就是僵尸进程

(2) 孤儿进程

孤儿可以理解为没有双亲

为什么会出现孤儿进程??

当父进程先退出了,也就是“死亡”了,只留下孤零零的子进程,没人回收

这个时候,子进程就会变成孤儿进程

但是不要紧,父进程先退出了,子进程会被1号Init进程领养,也就是回收

(3) 僵尸进程的危害

子进程退出,父进程在忙,此时子进程无人回收,一直在占用资源

- 进程控制块(PCB)也要一直维护这个进程

- 创建的task_struct(PCB) 也要一直占用内存

这样会造成很多内存泄漏!!!

二、进程优先级

1、优先级的概念

优先级指的是 CPU分配资源的先后顺序。优先级高的进程 拥有优先执行的权利,对于多任务环境来说,配置优先级很有用。

2、Linux系统中的优先级

查看系统进程:ps -l

PID:当前进程的pid

PPID:父进程的pid

PRI:当前进程被执行的优先级,值越小,越早被执行

NI:代表这个进程的nice值,指的是优先级的修正值

PRI我们知道,是优先级,那么nice值是什么?有什么作用呢?

举个简单的例子,一个囚犯被判刑10年,但是监狱根据他的服刑表现,减刑2年,所以这个囚犯的最终服刑时间是8年

这里也是同理,PRI = 最初判刑时间10年,NI = 修正服刑时间 -2 年

所以最终的优先级PRI(new) = PRI + NI

其中 NI 的取值范围为 -19 ~ 20

3、修改nice值(nice命令、renice命令)

一般情况下,初始优先级PRI = 80,NI = 0,如果要修改PRI,修改NI即可(一般不建议修改),因为可能会引发“进程饥饿”问题!(当进程长时间得不到资源时,就会发生“进程饥饿”问题!)

(1) nice 命令

nice 命令的作用是按照用户指定的优先级运行进程(适用于尚未被运行的进程)。语法格式如下:

nice  [-n NI值]  命令

NI的取值是-20~19。数值越大,优先级越低

普通用户调整NI值的范围是 0~19,而且只能调整自己的进程,只能调高;

root用户才能将NI值设为负值,而且可以操作任何用户的进程。

(2) renice命令

renice 命令的作用是调整一个运行中的进程。命令格式如下:

renice  NI值  进程PID

注意:因为之前已经将NI值设为10,此时如果设为 5 不会生效,因为普通用户只能调高自己的进程NI值。

进程(三)—— 查看进程状态、进程优先级相关推荐

  1. 进程管理——查看进程状态

    1.uptime       使用uptime命令可显示系统当前时间.用户已登录系统的时间.系统中登录用户的数量.过去的1.5.15分钟内运行队列中的平均进程数量.   注意:通常,只要每个cpu的当 ...

  2. Linux——进程系列知识详述(操作系统、PCB进程控制块、查看进程状态等)

    文章目录 一.冯诺依曼体系 二.操作系统(OS) 1.概念 2.设计OS的目的 3.如何"管理" 3.系统调用函数和库函数 三.进程 1.基本概念 2.描述进程-PCB task_ ...

  3. linux怎么看go写的程序进程,Linux中查看进程状态信息-Go语言中文社区

    Linux中查看进程状态信息 一.常用命令总结 ps -l   列出与本次登录有关的进程信息: ps -aux   查询内存中进程信息: ps -aux | grep ***   查询***进程的详细 ...

  4. 【Linux】进程概念与进程状态

    文章目录 一.什么是进程 1.进程概念 2.进程描述 -- PCB 二.进程的一些基本操作 1.查看进程 2.结束进程 2.通过系统调用获取进程标示符 3.通过系统调用创建子进程 三.进程状态 1.普 ...

  5. 【Android 进程保活】提升进程优先级 ( 使用前台 Service 提高应用进程优先级 | 效果展示 | 源码资源 )

    文章目录 一. 使用前台 Service 提高应用进程优先级 1. 前台 Service 代码 2. 前台 Service 代码 3. 启动服务 二.效果展示 三.源码资源 一. 使用前台 Servi ...

  6. 进程概念(PCB、进程创建、进程状态等)

    进程是一个运行的程序,是所有计算机的基础.这个过程与计算机代码不一样,尽管它们非常相似.程序通常被认为是 "被动的" 实体,而进程则是 "主动的" 实体.硬件状 ...

  7. Linux中查看进程状态信息

       Linux中查看进程状态信息 一.常用命令总结  ps -l   列出与本次登录有关的进程信息:    ps -aux   查询内存中进程信息:    ps -aux | grep ***    ...

  8. 【Android 进程保活】提升进程优先级 ( 使用前台 Service 提高应用进程优先级 | 启动相同 id 的第二个前台 Service 关闭通知 )

    文章目录 一. 前台 Service 通知问题 二. 设置 startForeground id 参数为 0 三. 启动相同 id 的第二个前台 Service 关闭通知 1. 前台服务 1 2. 关 ...

  9. 【Android 进程保活】Android 进程优先级 ( 前台进程 | 可见进程 | 服务进程 | 后台进程 | 空进程 )

    文章目录 一.Android 进程优先级 二.前台进程 三.可见进程 四.服务进程 五.后台进程 六.空进程 一.Android 进程优先级 Android 进程优先级 : ① 前台进程 > ② ...

最新文章

  1. 实战:人脸识别的Arcface实现 | CSDN博文精选
  2. 批量下载哨兵(Sentinel)数据
  3. 多线程的第三种模式(callable)
  4. 软件开发系统类别记录
  5. 深入浅出GAMP算法(下):MMSE估计和AWGN场景
  6. DIY WINDOWS XP
  7. ceph集群安装报错解决方法
  8. 云闪付华为P9指纹_华为云闪付app下载-华为云闪付 安卓版v9.0.11.324-pc6手机下载...
  9. 笔记本拔插电源黑屏问题
  10. Debian11 安装Chromium浏览器
  11. 【正则】常用正则公式
  12. 第三章:绘制统计图形
  13. Hadoop是什么?基本概念
  14. 织梦php模板在哪个文件夹,织梦主要文件夹目录及模板文件说明
  15. 微信控制树莓派运行python_Python+树莓派+人体红外感应模块 实现微信监控
  16. STM32+二氧化碳传感器(FS00301)
  17. Stduino学习(一)3色LED模块
  18. mysql 建表 sql语句
  19. W3cshool之JavaScript基础
  20. 无法打开服务器性能对象,日志提示:无法打开服务器服务性能对象,如何解决?...

热门文章

  1. android+闪屏启动优化,Android分享笔记(2) APP启动时闪屏
  2. java练习:金额转换,阿拉伯数字转换成中文传统形式
  3. python列表导出excel_python list格式数据excel导出方法
  4. OpenProcessToken LookupPrivilegeValue 和AdjustTokenPrivilege
  5. this.$refs 为空问题
  6. 科学-天文学-天文观测站:TMT(红外天文望远镜)
  7. 二进制安全:转化大师漏洞复现:Boxoft Convert Master 1.3.0 - ‘wav‘ SEH Local Exploit
  8. mac idea 自动补全代码
  9. java舞伴配对_真心求助【舞伴问题】用JAVA实现
  10. 做代理记账工作风险有哪些