Linux 中 renice 和 chrt 命令有什么区别?
答案1
chrt(1) 不仅用于更改进程的优先级,还用于更改调度策略。调度策略有四种:
- SCHED_FIFO=先进先出,实时进程。
- SCHED_RR=循环实时进程。
- SCHED_OTHER=正常分时
- SCHED_BATCH=几乎与SCHED_OTHER相同,但是该进程始终被认为最耗费CPU。
参见 setscheduler(2)。
renice(8) 只是改变进程的优先级。
答案2
嗯,我在http://www.spinics.net/lists/linux-rt-users/msg03987.html这很好地解释了差异:
“nice” 是一个历史悠久的实用程序,在批处理计算的早期用于对其他用户表示“友好”,并放弃一些 CPU 时间。它仍在使用中并且很有用,仅适用于在 Linux 上使用 SCHED_OTHER 策略运行的进程。
“chrt” 是一种用于更改调度策略(SCHED_OTHER、SCHED_FIFO、SCHED_RR)和进程/任务优先级的工具。使用 chrt,您可以启动具有此类策略的进程,也可以修改已在运行的进程/任务策略。您需要拥有执行此操作的权限。
因此,主要的区别在于“nice”只能在 SCHED_OTHER 策略的 nice 级别内运行,而“chrt”可以改变策略和进程/任务的优先级。
...
泰格利希
答案3
简而言之:
renice 对人类没有可察觉的影响,但 chrt 有。
我记得 renice +19 曾经对 SUNOS 有影响 —— 但 SUN“修复”了这个问题,可能是因为人们抱怨它有影响。
几十年前,我就抱怨过这种功能在任何 UNIX 上都不可用(但在 Windows 上有),而这个想法被很多 UNIX 专家拒绝了——UNIX 已经很完美了。
chrt 的主要应用领域是启动具有空闲调度类的进程。这应该允许启动 CPU 密集型非交互式进程,而不会对使用其他(正常)调度类运行的进程产生太大影响 - 这意味着并行构建不会导致视频播放器卡顿。
后期编辑:至少在 centos 7.9 上,以空闲优先级运行的进程仍然会抢占以正常优先级运行的进程。所以我可能不得不推翻我上面的陈述,即 chrt 有效果,而 renice/nice 没有效果。两者似乎同样没用。