我已经阅读nice renice并ionice控制正在运行的进程的调度优先级。但是,我仍然不明白它们何时以及如何有用。例如做这样的事情:
nice -n 13 pico myfile.txt
Run Code Online (Sandbox Code Playgroud)
小智 5
关于 pico,它不太可能引起太多关注,因此它不是您通常会使用的那种命令/renice 或 ionice。但是,您的命令将执行 pico nice to +13。这意味着分配给它的时间会大大减少。例如,从您的 pico 线路开始。通常执行的 pico 如下所示:
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 20118 20117 4006 0 31 0 2435548 1068 - S eb577e0 ttys000 0:00.03 -bash
501 20136 20118 4006 0 31 0 2434992 772 - S+ 85eed20 ttys000 0:00.00 pico
Run Code Online (Sandbox Code Playgroud)
其中 NI 是不错的级别。如果我用你的命令运行 pico 它看起来像这样:
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 20118 20117 4006 0 31 0 2435548 1068 - S eb577e0 ttys000 0:00.03 -bash
501 20179 20118 4006 0 18 13 2434992 904 - SN+ 85eed20 ttys000 0:00.01 pico
Run Code Online (Sandbox Code Playgroud)
好的,这说明您运行的命令行是有效的,但它实际上是做什么的?好吧,假设您的系统很忙,但并不令人讨厌。它全天候都很忙,在午夜开始一项重要的维护任务。它是运行脚本的 mysql 命令行以生成一些每日统计信息。有很多处理,所以它会严重影响 CPU 并且用户抱怨这个。强烈地,正如他们所做的那样。你能为这个做什么?这个脚本需要多长时间并不重要,所以你在命令前面加上“nice -n 13”,下次运行它不会对用户产生如此严重的影响,但需要更长的时间才能完成。MySQL 脚本的所有者并不关心,因为他只想要第二天到达时的统计信息。每个人都很开心。
除了这些工具的故事之外,您还可以控制系统如何优先考虑分配给任务的 CPU(在 ionice 的情况下可能是 IO)时间。它们只有在系统加载时才会生效,在此之前,每个人的任务都在他们需要的时候被分配。
renice 命令的工作方式非常相似,但它允许您更改已经运行的进程的优先级。因此,在上面的轶事中,您可以使用 renice 更改 mysql 命令的优先级,而无需重新启动它。以下命令会将所有名为“mysql”的正在运行的任务重新设置为 +13,一个低得多的优先级:
renice -n 13 -p `pidof mysql`
Run Code Online (Sandbox Code Playgroud)
至于 ionice,我不能发表评论,但我猜它可以让你用 IO 做类似的事情。影响某些任务执行的 io 量,例如磁盘读/写。如有必要,在限制备份过程中可能有用吗?