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值 的相关文章

  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 通过名称查找进程ID

    如何在 Ruby 中通过名称或完整命令行找到 pid 而不调用外部可执行文件 我正在将 SIGUSR2 发送到命令行包含的进程ruby job rb 我想在不打电话的情况下执行以下操作pgrep uid Process uid pid pg
  • 类unix系统中的python和python3命令有什么区别?

    我通读了每个命令的描述 但每个命令的描述都是完全相同的 所以我不明白这两个命令在类 Unix 系统中的工作方式有何不同 谁能解释其中的区别吗 Python3命令的引入是因为python命令指向了python2 从那时起 Python3 已成
  • 怎样才能使 Windows 成为一个开箱即用的 POSIX 兼容操作系统?

    这个问题的动机是我的一个牵强的梦想 即 nix 平台上可用的许多优秀软件可以轻松移植到 Windows 微软最近对开源和开放性采取了不同的方法 所以我真的很想知道如果微软有这样的倾向 这样的事情会有多可行 我很好奇的一些更具体的事情是 是否
  • awk: hping: 打印 icmp 发起/接收之间的差异

    我有以下输出hping http ports su net hping在 OpenBSD 上 hping icmp ts www openbsd org HPING www openbsd org re0 129 128 5 194 icm
  • 如何使用 UNIX shell 计算字母在文本文件中出现的次数?

    我有几个文本文件 我想计算每个字母在每个文件中出现的次数 具体来说 我想使用 UNIX shell 来执行此操作 形式为 cat file 做东西 有没有办法让 wc 命令来执行此操作 grep char o filename wc l
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • ssh远程变量赋值?

    以下内容对我不起作用 ssh email protected cdn cgi l email protection k 5 echo k 它只是返回一个空行 如何在远程会话 ssh 上分配变量 Note 我的问题是not关于如何将本地变量传
  • waitpid() 的作用是什么?

    有什么用waitpid 它通常用于等待特定进程完成 或者如果您使用特殊标志则更改状态 基于其进程 ID 也称为pid 它还可用于等待一组子进程中的任何一个 无论是来自特定进程组的子进程还是当前进程的任何子进程 See here http l
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • 用户的完整 UNIX 用户名

    想知道您是否知道是否有一种巧妙的方法可以从 shell 获取完整的用户名 示例 如果我的 UNIX 用户名是 froyo 那么我想获取我的全名 在本例中 如系统中注册的那样 froyo Abhishek Pratap Finger 命令可以
  • fork 和 exec 之间的区别

    两者有什么区别fork and exec 指某东西的用途fork and exec它体现了 UNIX 的精神 它提供了一种非常简单的方法来启动新进程 The fork调用基本上复制了当前进程 在almost任何方式 并非所有内容都会被复制
  • GnuTLS 错误 -110:TLS 连接未正确终止

    我发现我的一个 Windows 服务没有连接到 Unix 服务器上的 FTP 位置 我在我的 PC 上运行了可执行文件 因为开发人员没有记录任何错误 并且我在尝试从 FTPWebRequest 获取响应时遇到超时错误C 中的对象 尝试使用
  • wget 并行下载文件并重命名

    我有一个包含两列的文本文件 第一列是要保存的名称 第二列是资源的 url 地址 10000899567110806314 jpg http lifestyle inquirer net files 2018 07 t0724cheekee
  • Windows 相当于 Unix find 命令,用于搜索多种文件类型

    虽然在 Windows 中安装了 cygwin 可以提供大部分 unix 命令 但我仍然想知道如何使用 Windows find 命令在一个命令中搜索多个文件类型 ie find name cpp o name h o name java
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期

随机推荐

  • 一些有趣的 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的占有