Linux系统编程12:进程的优先级及PR和NI&&如何修改进程优先级

文章目录

(1)什么是进程的优先级

这里首先要区分优先级和权限的关系:以食堂举例,你能去学生食堂而不能去职工食堂,这是因为你没有权限,你可以去食堂,但是你却排不上队,这是因为你的优先级不够(你跑的够不够快,排的是不是在前面)

换到进程中,当进程太多时,进程就需要被合理的管理,总不能谁都抢着去占用CPU,所以CPU分配资源的先后顺序就是进程的优先级
在计算机中肯定是进程数大于CPU的数量,也就是人数太多而资源太少,因此优先级的作用就显得至关重要,它可以让优先级高的进程有优先执行权利,让那些不重要,优先级低的进程等一等,或者按照到其他CPU。

还是遵循操作系统管理的原则——“先描述,再组织”。你在Linux内核源代码里,在task_struct中也能看见这部分内容
Linux系统编程12:进程的优先级及PR和NI&&如何修改进程优先级

(2)进程优先级如何表示

使用命令ps -l可以列出当前用户创建的进程,比如下面我使用ps -l后会列出两个进程,一个进程就是bash,另一个则是我刚刚输入的命令
Linux系统编程12:进程的优先级及PR和NI&&如何修改进程优先级
上面的UID实则就是我这用户的身份标识,如果我切换为root用户,可以发现UID也换了
Linux系统编程12:进程的优先级及PR和NI&&如何修改进程优先级

(3)PRI和NI

A:什么是PRI和NI

上图中与优先级有关的两个信息是:PRI和NI

  • PRI:代表这个进程执行的优先级,其值越小越早被执行
  • NI:代表这个进程的NICE值,用于修正进程优先级

调整进程时,调整的不是PRI,而是NI,通过修正NI以达到修改PRI。默认情况下PRI是80,nice是0,修正时每修改一次NICE,新的PRI=80+NICE的修正值
NICE的取值范围为[-20,19],因此PRI的范围为[60,99]。根据以上描述,NICE为负值时会使优先级变大,NICE为正值会使优先级变小

B:如何修改进程优先级

(一般情况下,不建议修改,因为进程优先级是由操作系统自行完成的)

这里为了说明清楚,我创建一个C语言文件,让其死循环在后台运行,然后修改其进程优先级。
Linux系统编程12:进程的优先级及PR和NI&&如何修改进程优先级
修改时,升级root权限,按top进入资源管理器,然后再按r,接着输入要修改的进程的PID,然后输入NICE值,比如下面我将其进程调至最大(也就是输入负值,由于最小是-20,所以即便下面我输了一个非常小的数,其结果仍然是-20)
Linux系统编程12:进程的优先级及PR和NI&&如何修改进程优先级

(4)其他概念

  • 竞争性:系统进程数目很多,但CPU资源有限,于是各进程了完成自己的任务,就要相互竞争资源
  • 独立性:多个进程同时运行时,独享自己资源,互不干扰
  • 并行:多个进程在多个CPU下分别同时进行运行
  • 并发:多个进程在一个CPU下采用进程切换的方式,在一段时间内,让多个进程都能推进,好像在“同时运行”
上一篇:和微信公众号编辑器战斗的日子


下一篇:记录一次Webshell后门植入