【Linux】进程优先级&前后台理解

简介: 【Linux】进程优先级&前后台理解

进程优先级



概念


所谓进程优先级,实际上就是CPU资源分配的先后顺序。说白了就是谁的优先级高,谁就先被CPU调度。由于CPU的资源有限,为了更好的提高系统的性能,最大程度的合理分配CPU的资源,CPU会根据进程的优先级进行调度。


“插队”与“抢占”


我们知道,处于R状态的进程是指该进程的PCB处在运行队列中,等待被CPU调度,而队列我们知道它的特点,即先进先出,但是因为有了优先级的存在,就会出现所谓的插队现象。并且当代计算机都是支持“抢占”的。也就是说,假如一个进程正在运行时,突然来了一个优先级更高的进程,OS就会调用一些函数将该进程从CPU上剥离,然后把优先级高的放进去。


1.png


“插队”


进程优先级的查看


我们可以输入一些指令,比如ps -l,或者top等一些指令,来观察进程的优先级。


2.png


ps -l查看当前bash下的进程


其中PRI表示进程的优先级(Priority),PRI越低,表示该进程的优先级越高。由于PRI是内核动态调整的,我们无法干涉。但是我们可以通过调整NI(nice)值,来调整进程的优先级。


进程优先级的调整


首先我们来看一下公式:


PRI(new) = PRI(old) +nice


🔴注意点:

PRI(old)一般都是值起始的那个值80


root用户可以修改自己或他人进程的nice值,范围为-20~19


一般用户仅可以调整自己进程的nice值,范围为0~19,这是为了避免一般用户抢占系统资源


一般用户仅可将nice值越调越高,也就是说假如第一次调的时候,nice为5,则下一次只能调nice>5


有两种方式调整nice值:nice指令:一开使执行某个程序时,就给定一个指定的nice值;renice指令:调整某个已经存在的PID的nice值。


nice与renice

首先是nice指令,可以理解为初始化PRI,即在执行这个进程的时候,就通过NI设置了PRI。nice -n num 进程:将进程的NI设置为num值(普通用户num范围:[0,19])


&放中间的意思是使&左右两边的指令同时执行。


3.png


接下来是renice,修改已经存在的进程的NI。指令renice 数字 PID:将pid的进程的NI修改为指定数字。


4.png


通过top调整

我们还可以通过top指令来调整


我们先输入指令top,然后按r键,接着输入进程的pid,然后输入想要修改的NI值,就可以对进程的PRI进行调整。


5.gif


演示


前后台理解



前台


我们来谈一谈什么是前台,很好理解。 假如此时我们只有一个终端,此时出现提示字符让我们操作的环境就是前台。举个例子,我们输入指令vim,此时会进入vim的操作平台,这时我们就处于前台状态。

而像我们在bash下执行我们的程序时,比如执行不断地打印,这些打印情况等我们都可以看到,这就是前台进程。就像Windows下的qq,此时我打开qq,并且处在它的界面上使用,此时qq就是一个前台进程。


6.png


总结一句话:可以被我们人为控制与执行命令的环境就是前台,Linxu下的前台进程可以使用ctrl c指令中止。


后台


而后台就是指任务可以自动执行,不用我们人为干预,我们也无法使用ctrl c中止。


7.png


就像Winodws下的这104个后台进程,会自动执行,不需要我们来操心。


Linux下的前后台切换


合理的利用前后台可以提高我们的工作效率,举个例子来说,Linux下假如我们正在传输一个文件,而处于前台环境下,我们无法做别的事情,只能等传输完毕后,才可以进行干别的事。再比如,我们处在vim下,而此时我们想使用命令行界面操作一些别的指令,此时处在前台的我们,是无法做到在一个终端环境下,既使用vim,又使用命令行界面。

那我们就可以将vim扔到后台,处理完我们的事后再从后台拿到前台,继续使用vim。不过需要注意的是: 放入后台的任务想要继续运行时,必须不能与用户交互。就好像vim, 我们只可以把它放进后台,让vim在后台处于暂停状态,但不可以让vim在后台处于运行状态,因为vim进程的执行,需要与我们形成交互,是需要我们用户输入数据(比如写代码等)

查看目前后台任务

我们可以通过指令jobs -l,来查看后台任务。


Done表示该进程执行结束

Running表示正在运行

Terminated 表示该进程已被中止

Stopped表示该进程暂停

Killed表示该进程被杀掉

直接将命令丢到后台中执行-->&

我们可以在一个命令的最后面加上&,这样就可以将该命令放在后台去执行。如下:


8.png


将当前任务丢进后台-->ctrl z

ctrl z表示将当前任务丢进后台,并处于暂停。比如此时打开vim,我们按下ctrl z,就会将vim丢进后台并暂停该进程。我们此时输入fg num,就会将编号为num的后台任务拿到前台来处理(只输入fg会默认拿出最近放入的后台进程到前台)。


如下:


9.gif


当然,我们也可以输入bg num 可以使后台编号为num的进程处于运行状态(后台进程运行的前提是不会与用户交互,比如vim只能在后台处于暂停,因为vim的运行需要与用户交互)。


如何杀掉后台进程

后台进程使用ctrl c是杀不掉的,只可以使用kill指令。


10.png


我们可以输入kill -9 pid指令杀掉进程,或者killall 进程名 杀掉,亦或者kill -9 %num 杀掉后台进程编号为num的进程。


🔴小总结:

前台任务可以使用ctrl c中止,后台任务不可使用ctrl c中止


在指令最后方加上&,表示将该指令丢在后台,并执行


ctrl z会将当前任务丢进后台,并处于暂停状态


我们丢进后台的进程都会有编号,我们可以输入指令:fg 编号,就会将该编号的进程从后台拿到前台,输入指令:bg 编号 会使该编号的后台进程从暂停变成执行。


后台任务的执行需要一个条件:后台任务不会与用户进行交互


指令:jobs -l,可以查看当前bash(只能查看当前bash下的)下的后台任务。


使用kill -9 PID 或者kill all 进程名 或者kill -9 %编号,都可以杀掉后台进程。


jobs下的+表示最近丢进后台的进程,-表示最近第二个被丢进后台的进程


我们之前ps axj指令下的状态后面加一个加号, 表示该进程处于前台状态(比如:S+),状态后面没有加号(比如S),表示该进程在后台。


相关文章
|
19天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
22天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
88 4
linux进程管理万字详解!!!
|
12天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
54 8
|
9天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
21天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
60 4
|
22天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
23天前
|
消息中间件 存储 Linux
|
30天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
39 1
|
1月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
【10月更文挑战第9天】本文将深入浅出地介绍Linux系统中的进程管理机制,包括进程的概念、状态、调度以及如何在Linux环境下进行进程控制。我们将通过直观的语言和生动的比喻,让读者轻松掌握这一核心概念。文章不仅适合初学者构建基础,也能帮助有经验的用户加深对进程管理的理解。
26 1
|
1月前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
32 0
Linux c/c++之IPC进程间通信
下一篇
无影云桌面