linux进程调度,优先级、进程nice值

2023-11-04


我自己补充一下:APUE8.16中讲到进程调度,UNIX系统历史上对进程提供的只是基于调度优先级的粗粒度的控制,调度策略和调度优先级是由内核确定的,但是内核可以通过调整nice值选择以更低优先级运行(通过调整nice值降低它对cpu的占有,因此该进程是"有好的").只有特权进程允许提高调度权限

POSIX(protable operate system interface)可移植操作系统接口实时扩展增加了在多个调度类别中选择的接口以进一步细调行为.APUE中只讨论了用于调整nice值的接口,其中nice值越小,优先级越高.有点你牛逼,你不好惹,你不友好,你先执行的意思.....


#include<unistd.h>
int nice(int incr); //返回值:若成功,返回新的nice值;若出错,返回-1

incr被增加到调用进程的nice值上.如果nice过大或过小,都会被系统降到最大合法值或提高到最小合法值.

注意:因为-1是合法的成功返回值,所以会被误认为是错误返回.这里解决办法是要查看errno的值,errno在标准C中是一个整形变量,在errno.h中生命,C标准库中实现.为防止和正常的返回值混淆,系统调用并不直接返回错误码,而是将错误码放入一个名为errno的全局变量中。如果一个系统调用失败,你可以读出errno的值来确定问题所在.如果nice返回-1,需要检查它的值.如果nice成功调用,并且返回值是-1,errno的值应该为0.如果不是0,说明nice值调用失败.

和进程nice值相关的函数:

#include <sys/resource.h>
int getpriority(int which, id_t who); //返回值:若成功,返回nice值;若失败,返回-1
getpriority函数可以像nice函数获取进程nice值,而且他还可以获取一组相关进程的nice值.

which参数可以取以下三个值之一:PRIO_PROCESS表示进程,PRIO_PGRP表示进程组,PRIO_USER表示用户ID.which参数控制who参数如何解释,如果who为0,表示调用进程,进程组或者用户(取决与which参数的值).

#include <sys/resource.h>
int setpriority(int which,id_t who, int value);//返回值:若成功,返回0;若失败,返回-1
参数和getpriority一样,其中value增加到nice值上.

下面参考原文地址:http://blog.csdn.net/codestinity/article/details/7496962

进程cpu资源分配就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

一、先看系统进程:

首先,我想用一个简单的命令来引起这个议题。 无论在linux或者unix系统中,用ps –l命令则会类似输出以下几个内容:

[root@dbbak root]# ps –l   --- 这里用的是linux测试
F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD
4 S     0 20538 20534  0  75   0    -  1063 wait4  pts/2    00:00:00 bash
4 R     0 20663 20538  0  75   0    -   828 -      pts/2    00:00:00 ps

我们很容易注意到其中的几个重要信息,有下:
UID : 代表执行者的身份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
PRI :代表这个进程可被执行的优先级,其值越小越早被执行
NI :代表这个进程的nice值
这里的前面的三个信息,我们都是比较好容易理解的,但是后面的两个奇怪的信息,一个是PRI,一个是NI,这到底是什么东西?相对而言,PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行。

到目前为止,更需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化

—————————————————————————
二、修改进程优先级的命令主要有两个:nice,renice

1、一开始执行程序就指定nice值:nice

  1. nice -n -5 /usr/local/mysql/bin/mysqld_safe &

linux nice 命令详解

功能说明:设置优先权。

语  法:nice [-n <优先等级>][--help][--version][执行指令]

补充说明:nice指令可以改变程序执行的优先权等级。

参  数:-n<优先等级>或-<优先等级>或–adjustment=<优先等级>  设置欲执行的指令的优先权等级。等级的范围从-20-19,其中-20最高,19最低,只有系统管理者可以设置负数的等级。
–help  在线帮助。
–version  显示版本信息。
—————————————————————————
2.1、调整已存在进程的nice:renice

  1. renice -5 -p 5200
  2. #PID为5200的进程nice设为-5

linux renice 命令详解

功能说明:调整优先权。

语  法:renice [优先等级][-g <程序群组名称>...][-p <程序识别码>...][-u <用户名称>...]

补充说明:renice指令可重新调整程序执行的优先权等级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。等级范围从-20–19,只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。
参  数:
-g <程序群组名称>  使用程序群组名称,修改所有隶属于该程序群组的程序的优先权。
-p <程序识别码>  改变该程序的优先权等级,此参数为预设值。
-u <用户名称>  指定用户名称,修改所有隶属于该用户的程序的优先权。

2.2、也可以用top命令更改已存在进程的nice:

  1. top
  2. #进入top后按“r”–>输入进程PID–>输入nice值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux进程调度,优先级、进程nice值 的相关文章

  • Windows 相当于 Unix find 命令,用于搜索多种文件类型

    虽然在 Windows 中安装了 cygwin 可以提供大部分 unix 命令 但我仍然想知道如何使用 Windows find 命令在一个命令中搜索多个文件类型 ie find name cpp o name h o name java
  • 在 Unix 上,我应该对 errno 使用 system_category 还是 generic_category ?

    C 0x 有两个预定义的error category对象 generic category and system category 据我目前所知 system category 应用于操作系统返回的错误 并且generic category
  • 使用 wget 从 Google Scholar 搜索结果下载所有 pdf 文件

    我想写一个简单的网络蜘蛛或者只是使用wget从谷歌学术下载 pdf 结果 这实际上是获取研究论文的一种非常巧妙的方式 我已阅读 stackoverflow 上的以下页面 使用wget爬取网站并限制爬取链接总数 https stackover
  • 如果目录不存在,有没有办法让 mv 创建要移动到的目录?

    因此 如果我在主目录中并且想将 foo c 移动到 bar baz foo c 但这些目录不存在 是否有某种方法可以自动创建这些目录 以便你只需要输入 mv foo c bar baz 一切都会顺利吗 似乎您可以将 mv 别名为一个简单的
  • 如何使用 Perl 在 Unix 中获取文件创建时间

    如何使用 perl 在 unix 中获取文件创建时间 我有这个命令显示文件的最后修改时间 perl MPOSIX le print strftime d b Y H M localtime lstat 9 for ARGV file txt
  • X 服务器使用什么像素格式?

    X 服务器使用什么像素格式 RGBA ARBG BGRA 如果有任何特定格式的话 Update 我专门寻找有关颜色分量顺序和位模式的信息 你的意思是帧缓冲区格式 或者所有支持的像素图格式 无论是哪一种 都取决于您的图形硬件 驱动程序和配置
  • 如何创建路径别名?

    那么 cs 将映射到 College 以便我可以运行命令 cd cs 我相信您在问如何创建符号链接 或符号链接 例如 ln s College cs 不过 还有其他方法可以加快工作流程 例如设置 CDPATH export CDPATH C
  • 如何将文本数据从 ruby​​ 控制台传递到剪贴板而不保存到文件?

    我试图将我创建的全局变量中包含的数组传递到我的 mac 上的剪贴板中 它很长 所以我不想在控制台上突出显示 复制和粘贴 我想使用嵌入式unix代码 特别是pbcopyMac 笔记本电脑控制台的功能 允许我将文本传递到我的计算机剪贴板中 准备
  • 如何在Linux中获取带有图标的活动应用程序

    我想找到一种方法获取活动应用程序的列表及其名称和图标 实际上 我正在使用此命令来获取所有活动进程 wmctrl lp 示例输出 0x03800002 0 3293 user notebook XdndCollectionWindowImp
  • VMA和ELF段之间的关系

    我需要确定 ELF 可执行文件的可加载段的 VMA VMA 可以从以下位置打印 proc pid maps VMA 之间的关系如下所示maps可加载段对我来说也很清楚 每个段由一个或多个 VMA 组成 内核使用什么方法从 ELF 段形成 V
  • 使用 SED 将单词的第一个字母大写

    如何将单词的第一个字母替换为大写字母 例如 Trouble me Gold rush brides into Trouble Me Gold Rush Brides 这一行应该做到这一点 sed e s b u 1 g
  • Amazon EC2 的替代工具?

    Amazon 与 EC2 交互的官方工具有点笨重且难以处理 我必须设置一堆环境变量 为 EC2 存储单独的私钥 向我的 PATH 添加额外的项目 等等 它们都输出制表符分隔的行 长度为数百个字符 没有标题 因此解释它们有点困难 他们关于设置
  • 具有多个文件扩展名的查找命令

    我正在查看许多子目录 找到所有以 JPG jpg 和 png 结尾的文件 并将它们复制到一个单独的目录中 但是现在只找到 JPG 有人可以解释我做错了什么吗 find root TEST Images name png o name jpg
  • 在进行 sem_timedwait 时,我将如何应对系统时间的变化?

    假设我有一个使用的程序sem timedwait为了等待 100 毫秒 获取当前时间 添加 100 毫秒 将结果用作abs timeout 参见手册页 http man7 org linux man pages man3 sem wait
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • 安装python启动文件

    我如何安装pythonstartup文件 以便它在命令上运行 例如python myfile py 我尝试将其安装到我的 home myuserUbuntu的目录 但它说我没有足够的权限 此外 不同的地方交替说它应该全部大写或全部小写 前面
  • 如何处理文件中的特殊字符(ഀ)

    我有一个文件 当我打开它时 它看起来像这样 Notepad A B C D E 31 HB 39 Ph 49 32 FB 38 Ph 59 当我尝试从 WinScp 打开它时 它看起来如下所示 A B C D E 31 HB 39 Ph 4
  • 使用 xlib 在屏幕顶部绘图

    我想在屏幕上的所有窗口顶部绘制一些图元 我在 C 中找到了一些代码并尝试将其移植以使用 python 的 xlib from Xlib display import Display from Xlib import X from Xlib
  • 如何捕获 X 错误?

    我尝试在网上搜索 但我必须注意 找到有关 X 编程这方面的材料并不容易 我使用 X 和 GLX 来创建 OpenGL 上下文 我已经知道我当前的显卡驱动程序仅支持 OpenGL API 版本 3 3 但我希望我的应用程序能够尝试创建任何类型
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find

随机推荐

  • 一些有趣的 js 功能函数

    一些有趣的 js 功能函数 数组 生成数组 打乱数组 数组简单数据去重 数组唯一值数据去重 多数组取交集 查找最大值索引 查找最小值索引 找到最接近的数值 压缩多个数组 拉链函数 矩阵交换行和列 数字转换 进制转换 正则 手机号格式化 去除
  • Docx:docx.opc.exceptions.PackageNotFoundError: Package not found at

    Docx docx opc exceptions PackageNotFoundError Package not found at https blog csdn net python reported article details 1
  • java finalize方法总结、GC执行finalize的过程

    注 本文的目的并不是鼓励使用finalize方法 而是大致理清其作用 问题以及GC执行finalize的过程 1 finalize的作用 finalize 是Object的protected方法 子类可以覆盖该方法以实现资源清理工作 GC在
  • 记一次计算机网络工程实验(1) 利用VLAN划分不同网段

    一学期没上过计算机网络工程的课 今天是第一次去做实验 把经验记在这里 免得过几天又忘了 安装Cisco Packet Tracer 首先需要下载和安装这次实验的工具 Cisco Packet Tracer 这是一个模拟路由器 交换机和各种终
  • Tomcat遇到闪退和Using CATALINA_OPTS:问题如何解决

    Tomcat遇到闪退和Using CATALINA OPTS 问题如何解决 最快的方法直接重新下载tomcat 链接 https pan baidu com s 1h12kdt5ZESJDdxY4AkcVjQ pwd oqsz 提取码 oq
  • 关于日期的正则表达式

    QTP是quicktest Professional的简称 是一种自动测试工具 QTP自带教程中有关于日期的正则表达式的例子 即对时间 月 日 年采用正则表达式方法进行检查 但经常是测试失败 例子中提供的表达式为 0 1 0 9 0 3 0
  • Vue3-ElemenPlu,全栈开发后台系统-JWT方案讲解第三章-Koa架构设计接口方面实现mongdb安装配置工具函数的封装前台首页实现

    第三章 Koa架构设计 usr bin env node Module dependencies var app require app var debug require debug
  • elasticsearch script实战

    写在前面 大家在开发elasticsearch的时候都会遇到很多去怪的需求 如果我们已知的RestAPI无法帮助我们完成搜索 是就需要我们自己动手写脚本来辅助搜索 完成需求 浅谈elasticsearch script脚本使用机制 通过阅读
  • angular:angular重用策略与ionic重用策略浅谈

    angular默认重用策略 同一个路由地址互相跳转会复用 否则会重新创建component 无任何重用 ionic默认重用策略 同一个路由地址会复用 在离开当前路由时会缓存路由地址对应的组件 当再次遇到相同路由地址时会恢复 但是复用后 如果
  • Vue移动框鼠标拖拽自定义指令

    在Vue中通过自定义指令 实现指定的模块带有鼠标拖拽移动效果 移动框自定指令 Vue directive drag bind el gt let initX null let initY null el style cursor move
  • 3-3 OneHot编码

    3 3 OneHot编码 请参考 数据准备和特征工程 中的相关章节 调试如下代码 基础知识 import pandas as pd g pd DataFrame gender man woman woman man woman g gend
  • 【华为机试刷题笔记】HJ16-购物单

    王强决定把年终奖用于购物 他把想买的物品分为两类 主件与附件 附件是从属于某个主件的 下表就是一些主件与附件的例子 主件 附件 电脑 打印机 扫描仪 书柜 图书 书桌 台灯 文具 工作椅 无 如果要买归类为附件的物品 必须先买该附件所属的主
  • Django高级扩展之celery使用

    Celery是一个简单 灵活 可靠的分布式系统 用于处理大量消息 同时为操作提供维护此类系统所需的工具 是一个专注于实时处理的任务队列 同时还支持任务调度 目录 应用场景 问题 解决 celery架构图 安装 配置celery Settin
  • 每日一题 day 58(DP topic)

    文章目录 problem wrong approach approach memorize dp problem 518 Coin Change 2 You are given an integer array coins represen
  • git每次都弹窗提示输入用户名和密码的解决方法

    每次进行git操作时总是要输入用户名密码很麻烦 解决方法是 加上用户本地凭证 命令如下 git config global credential helper store 然后再进行git操作 比如 git pull 打个比方 然后会拉起输
  • 什么是僵尸进程(Zombie)?

    分析Android系统启动过程的时候 init进程调用 signal handler init 函数用于设置子进程信号处理函数 它被定义在 system core init signal handler cpp中 主要用于防止init的子进
  • macos 使用串口终端

    其实很简单 先用ls看看 dev tty 哪个是具体的串口 我这里使用的edison的板子 所以插到macos上后可以看到的设备节点为 只需要使用screen 命令即可 具体的命令格式如下 screen dev tty usbserial
  • 【Node】腾讯云OSS存储上传图片

    目录 准备工作 后端Koa 前端Vue 建议 准备工作 购买腾讯云OSS存储后需要获得以下几个变量 SecretId 秘钥id SecretKey 秘钥 Bucket 存储桶名称 可在腾讯云的图像界面创建存储桶 Region 购买时选择的区
  • 苹果电脑计算机找不到打印机,Mac_Mac怎么连接打印机?苹果电脑Mac打印机设置教程 ,Mac怎么连接打印机?Mac打印机 - phpStudy...

    Mac怎么连接打印机 苹果电脑Mac打印机设置教程 Mac怎么连接打印机 Mac打印机该怎么设置呢 对于大多数 USB 打印机 您只需将打印机连接到 Mac OS X 会自动找到打印机 并下载所有驱动程序 如有必要 然后 您就可以打印了 您
  • linux进程调度,优先级、进程nice值

    我自己补充一下 APUE8 16中讲到进程调度 UNIX系统历史上对进程提供的只是基于调度优先级的粗粒度的控制 调度策略和调度优先级是由内核确定的 但是内核可以通过调整nice值选择以更低优先级运行 通过调整nice值降低它对cpu的占有