进程(三)—— 查看进程状态、进程优先级
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.uptime 使用uptime命令可显示系统当前时间.用户已登录系统的时间.系统中登录用户的数量.过去的1.5.15分钟内运行队列中的平均进程数量. 注意:通常,只要每个cpu的当 ...
- Linux——进程系列知识详述(操作系统、PCB进程控制块、查看进程状态等)
文章目录 一.冯诺依曼体系 二.操作系统(OS) 1.概念 2.设计OS的目的 3.如何"管理" 3.系统调用函数和库函数 三.进程 1.基本概念 2.描述进程-PCB task_ ...
- linux怎么看go写的程序进程,Linux中查看进程状态信息-Go语言中文社区
Linux中查看进程状态信息 一.常用命令总结 ps -l 列出与本次登录有关的进程信息: ps -aux 查询内存中进程信息: ps -aux | grep *** 查询***进程的详细 ...
- 【Linux】进程概念与进程状态
文章目录 一.什么是进程 1.进程概念 2.进程描述 -- PCB 二.进程的一些基本操作 1.查看进程 2.结束进程 2.通过系统调用获取进程标示符 3.通过系统调用创建子进程 三.进程状态 1.普 ...
- 【Android 进程保活】提升进程优先级 ( 使用前台 Service 提高应用进程优先级 | 效果展示 | 源码资源 )
文章目录 一. 使用前台 Service 提高应用进程优先级 1. 前台 Service 代码 2. 前台 Service 代码 3. 启动服务 二.效果展示 三.源码资源 一. 使用前台 Servi ...
- 进程概念(PCB、进程创建、进程状态等)
进程是一个运行的程序,是所有计算机的基础.这个过程与计算机代码不一样,尽管它们非常相似.程序通常被认为是 "被动的" 实体,而进程则是 "主动的" 实体.硬件状 ...
- Linux中查看进程状态信息
Linux中查看进程状态信息 一.常用命令总结 ps -l 列出与本次登录有关的进程信息: ps -aux 查询内存中进程信息: ps -aux | grep *** ...
- 【Android 进程保活】提升进程优先级 ( 使用前台 Service 提高应用进程优先级 | 启动相同 id 的第二个前台 Service 关闭通知 )
文章目录 一. 前台 Service 通知问题 二. 设置 startForeground id 参数为 0 三. 启动相同 id 的第二个前台 Service 关闭通知 1. 前台服务 1 2. 关 ...
- 【Android 进程保活】Android 进程优先级 ( 前台进程 | 可见进程 | 服务进程 | 后台进程 | 空进程 )
文章目录 一.Android 进程优先级 二.前台进程 三.可见进程 四.服务进程 五.后台进程 六.空进程 一.Android 进程优先级 Android 进程优先级 : ① 前台进程 > ② ...
最新文章
- 实战:人脸识别的Arcface实现 | CSDN博文精选
- 批量下载哨兵(Sentinel)数据
- 多线程的第三种模式(callable)
- 软件开发系统类别记录
- 深入浅出GAMP算法(下):MMSE估计和AWGN场景
- DIY WINDOWS XP
- ceph集群安装报错解决方法
- 云闪付华为P9指纹_华为云闪付app下载-华为云闪付 安卓版v9.0.11.324-pc6手机下载...
- 笔记本拔插电源黑屏问题
- Debian11 安装Chromium浏览器
- 【正则】常用正则公式
- 第三章:绘制统计图形
- Hadoop是什么?基本概念
- 织梦php模板在哪个文件夹,织梦主要文件夹目录及模板文件说明
- 微信控制树莓派运行python_Python+树莓派+人体红外感应模块 实现微信监控
- STM32+二氧化碳传感器(FS00301)
- Stduino学习(一)3色LED模块
- mysql 建表 sql语句
- W3cshool之JavaScript基础
- 无法打开服务器性能对象,日志提示:无法打开服务器服务性能对象,如何解决?...
热门文章
- android+闪屏启动优化,Android分享笔记(2) APP启动时闪屏
- java练习:金额转换,阿拉伯数字转换成中文传统形式
- python列表导出excel_python list格式数据excel导出方法
- OpenProcessToken LookupPrivilegeValue 和AdjustTokenPrivilege
- this.$refs 为空问题
- 科学-天文学-天文观测站:TMT(红外天文望远镜)
- 二进制安全:转化大师漏洞复现:Boxoft Convert Master 1.3.0 - ‘wav‘ SEH Local Exploit
- mac idea 自动补全代码
- java舞伴配对_真心求助【舞伴问题】用JAVA实现
- 做代理记账工作风险有哪些