IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 中的 renice 命令详解及C/C++代码实现 -> 正文阅读

[系统运维]Linux 中的 renice 命令详解及C/C++代码实现

Linux 中的 nice 命令有助于执行具有修改的调度优先级的程序/进程。 它启动具有用户定义的调度优先级的进程。

如果我们给一个进程更高的优先级,那么内核会为这个进程分配更多的 CPU 时间。 而 renice 命令允许您更改和修改已运行进程的调度优先级。

什么是进程

简而言之,进程是 Linux 用来承担运行程序角色的命名约定。 进程是规则的集合,任何特定程序通过这些规则使用分配的处理器时间、内存和 I/O 资源。 Linux 系统上运行的每个进程都有自己的进程 ID (PID),通过它可以对其进行监视和管理。

Linux内核旨在收集有关每个进程的各种信息。 这些包括但不限于:

进程状态(可运行、睡眠、僵尸或停止)
流程执行优先级(niceness)
使用资源信息
进程的所有者
每个特定进程打开了哪些网络端口和文件

现在我们对流程有了一些了解,我们可以继续创建一些流程。 为此,只需打开终端并在后台执行 yes 命令并将其输出重定向到 /dev/null:

在这里插入图片描述
从上面我们可以阅读到以下信息:

F – FLAG:进程没有以超级用户权限启动。 否则我们会看到数字 4 或 1 和 4 的总和。查看 man ps 了解更多信息。
S – STATE:进程当前正在运行
UID – 启动进程的用户的用户 ID。 UID 实际上是 EUID 的别名(有效用户 ID)
PID - 我们的 yes 命令的进程 ID 是 2329
PPID——父进程 ID。 这是一个进程 ID,我们的 yes命令是从中派生出来的。 在这种情况下,它是 PID 2244的 bash。
C – 处理器利用率的整数值,以 % 为单位。
PRI——进程优先级。 值越高优先级越低。
NI – 不错的值,范围从 -20 到19。值越高,您对其他用户就越好,换句话说,值越高,优先级越低。

进程的生命周期

Linux 进程管理的基本原则在创建新进程时包含两个不同的操作。 该操作是进程通过 fork() 调用复制自身的地方,从而创建一个具有唯一 PID 的新进程。 fork 操作最常见的是执行新程序的 exec() 操作。 在引导期间创建的第一个进程是 init,它始终分配 PID 1。所有其他进程都被视为 init 进程的子进程。

通常情况下,在子进程允许死亡之前,此事件需要由父进程通过发送退出值来确认。 成功终止发送父进程值 0。如果由于某种原因子进程超过父进程 init 将接受此进程作为孤立进程。

renice命令的使用

我们可以利用 renice 命令在进程运行时更改 niceness。 要查看语法,我们将传递 –h 选项:

在这里插入图片描述

renice 命令可以应用于进程、进程组或用户(目标)。 特权用户可以更改其他用户进程的优先级。 对于普通用户,优先级必须介于 0 和环境变量 PRIO_MAX(通常为 20)之间,数字越大表示友好度越高。

较高的 niceness 值意味着进程将以较低的优先级运行。 特权用户可以设置一个负优先级,低至 PRIO_MIN(通常为 -20),以加快进程。 请参阅 nice 命令以在初始运行时设置进程的调度优先级。

在这里插入图片描述
renice 命令示例:

在这里插入图片描述要更改它的值,我们可以使用 renice 命令并提供 PID 和 nice 值。 让我们将 nice 值更改为 15:

在这里插入图片描述

要遵循的规则是,非超级用户只能为任何进程增加 nice 值(给予较低的优先级)。 如果现在尝试将 nice 值从 15 更改为 10,则会出现以下错误:

renice: failed to set priority for 2329 (process ID): Permission denied

renice 命令还使 root 用户能够更改任何用户进程的 nice 值。 这是通过 -u 开关完成的。 以下 linux 命令将所有用户进程的优先级更改为 -19。

在这里插入图片描述

Linux renice命令C/C++实现

int main(int argc, char *argv[])
{

	if (argc < 2)
		usage();
	if (strcmp(*argv, "-n") == 0) 
	{
		incr = 1;
		argc--, argv++;
		if (argc < 2)
			usage();
	}
	if (getnum("priority", *argv, &prio))
		return (1);
	argc--, argv++;
	for (; argc > 0; argc--, argv++) 
	{
		if (strcmp(*argv, "-g") == 0) 
		{
			which = PRIO_PGRP;
			continue;
		}
		if (strcmp(*argv, "-u") == 0) 
		{
			which = PRIO_USER;
			continue;
		}
		if (strcmp(*argv, "-p") == 0) 
		{
			which = PRIO_PROCESS;
			continue;
		}
		if (which == PRIO_USER) 
		{
			if ((pwd = getpwnam(*argv)) != NULL)
				who = pwd->pw_uid;
			else if (getnum("uid", *argv, &who)) 
			{
				errs++;
				continue;
			} 
			else if (who < 0) 
			{
				warnx("%s: bad value", *argv);
				errs++;
				continue;
			}
		} 
   ...
}

运行结果:

在这里插入图片描述
在这里插入图片描述

总结

本篇讲解如何使用 renice Linux 命令更改进程的优先级值。更多了解请参考man手册。

欢迎关注微信公众号【程序猿编码】,需要renice命令完整源码的添加本人微信号(c17865354792)

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:22:23  更:2022-07-04 23:24:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:41:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码