使用 Linux Nice 和 Renice 示例更改进程优先级

举报
Tiamo_T 发表于 2022/08/10 08:54:14 2022/08/10
【摘要】 Nice 命令将启动具有用户定义的调度优先级的进程。Renice 命令将修改正在运行的进程的调度优先级。

Linux 中每个正在运行的进程都有一个优先级分配给它。

您可以使用 nice 和 renice 实用程序更改进程优先级。Nice 命令将启动具有用户定义的调度优先级的进程。Renice 命令将修改正在运行的进程的调度优先级。

Linux 内核调度进程并相应地为每个进程分配 CPU 时间。但是,当您的某个进程需要更高优先级以获得更多 CPU 时间时,您可以使用 nice 和 renice 命令,如本教程中所述。

进程调度优先级范围是-20到19。我们称之为nice值。

nice 值 -20 表示最高优先级,nice 值 19 表示进程的最低优先级。

默认情况下,当进程启动时,它的默认优先级为 0。

1. 显示过程的良好价值

可以使用 ps 命令显示进程的当前优先级。

ps 命令输出中的“NI”列表示进程当前的nice 值(即优先级)。

我们将启动一个名为 test.pl 的测试程序,用于演示 nice 和 renice 命令。该测试程序将执行某些任务,并将运行一段时间。

$ perl test.pl

如果执行如下所示的ps 命令,您会注意到这个 test.pl 程序的默认 nice 值是 0(查看以下输出中的 NI 列)。

$ ps -fl -C "perl test.pl"
F S UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 R bala 6884  6424 99  80   0 -  1556 -      13:45 pts/3    00:05:54 perl test.pl

2.启动一个优先级较低的程序

您可以使用 nice 命令来启动具有特定优先级的进程,而不是使用默认优先级启动程序。

在这个例子中,test.pl 以一个不错的值 10 启动。

$ nice -10 perl test.pl

注意:请记住,上面命令中的 -10 将进程的优先级设置为 10。nice 命令中的 – 代表 hypen,我们使用它来将选项传递给命令。

所以,要传递好的值 5,你会说 -5。要传递 6 的好值,您会说 -6。

正如你在下面看到的,这个程序现在以一个不错的值 10 启动,这意味着与默认启动的其他程序相比,它会以较低的优先级运行。

$ ps -fl -C "perl test.pl"
F S UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 R bala 7044  6424 99  90  10 -  1556 -      13:58 pts/3    00:00:03 perl test.pl

3.启动具有高优先级的程序

您还可以启动具有更高优先级的程序。负的 nice 值将增加进程的优先级。因此,该值必须在 nice 命令前面使用 - (两个连字符)指定,如下所示。

# nice --10 perl test.pl

因此,要传递-5 的nice 值,您将在5 前面添加两个连字符。要传递-6 的nice 值,您将在6 前面添加两个连字符。

正如你在下面看到的,这个程序现在以一个不错的值 -10 启动,这意味着与默认启动的其他程序相比,它会以更高的优先级运行。

# ps -fl -C "perl test.pl"
F S UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 R root 3534  3234 99  70 -10 -  1557 ?      19:06 pts/1    00:00:56 perl test.pl

注意:普通用户不能启动优先级更高的程序。只允许 root 用户启动具有高优先级的程序。

作为普通用户,如果您提高优先级,您将收到来自 nice 命令的以下错误消息。

$ nice --10 perl test.pl
nice: cannot set niceness: Permission denied

请注意,打印上述错误消息后,程序仍会以默认优先级(即:0)继续运行。

4. 使用选项 -n 更改优先级

可以借助 -n 选项调整进程优先级。

增加优先级:

# nice -n -5 perl test.pl

降低优先级:

# nice -n 5 perl test.pl

5.更改正在运行的进程的优先级

可以使用 renice 命令更改已运行进程的优先级。

在这个例子中,程序 test.pl 已经以 -10 的不错的值运行。

# ps -fl -C "perl test.pl"
F S UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 R root 3534  3234 99  70 -10 -  1557 ?      19:06 pts/1    00:00:56 perl test.pl

我们可以将上述程序的nice值改为-19,如下所示。将上述程序的进程 ID 传递给 -p 选项。

# renice -n -19 -p 3534

验证 nice 值是否已更改为 -19。

# ps -fl -C "perl test.pl"
F S UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 R root 3534  3234 99  70 -19 -  1557 ?      19:06 pts/1    00:00:56 perl test.pl

6.更改属于一个组的所有进程的优先级

使用 -g 选项可以修改属于一个组的所有进程的优先级。以下命令会将所有属于 tiamo 的进程的 nice 值更改为 5。

# renice -n 5 -g tiamo

7.更改用户拥有的所有进程的优先级

Renice 允许更改特定用户拥有的所有进程的优先级,如下所示。

# renice -n 5 -u bala

上述命令将改变用户bala拥有的所有进程的优先级。它将为属于用户bala 的所有进程分配一个nice 值5。

# ps -fl -C "perl"
F S UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 R bala 2720  2607 99  85   5 -  1556 -      14:34 pts/2    00:05:07 perl test.pl
0 R bala 2795  2661 99  85   5 -  1556 -      14:39 pts/3    00:00:09 perl 2.pl
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。