Linux nice 命令及实用示例

LinuxBeginner
立即练习

简介

在本实验中,我们将探索 Linux 的 nice 命令,它允许你调整进程的优先级。我们将从理解进程优先级的概念以及 nice 命令的工作原理开始,然后通过实际示例学习如何使用 nice 来管理进程调度。实验内容包括检查进程当前的 niceness 值、使用不同的 niceness 值运行命令,以及调整运行中进程的优先级。本实验通过动手实践的方式,帮助你理解并有效利用 nice 命令在 Linux 环境中进行进程管理。

Linux 命令速查表

理解 nice 命令

在这一步中,我们将学习 Linux 中的 nice 命令,它允许你调整进程的优先级。nice 命令用于设置进程的 niceness 值,该值决定了进程的调度优先级。

niceness 值的范围是 -20 到 19,其中 -20 表示最高优先级,19 表示最低优先级。新进程的默认 niceness 值为 0。

让我们从检查当前进程的 niceness 值开始:

## 检查当前 shell 进程的 niceness 值
nice -n 0 echo $PPID

示例输出:

22456

输出显示了当前 shell 进程的进程 ID (PID),其 niceness 值为 0。

现在,让我们使用不同的 niceness 值运行一个命令:

## 使用 niceness 值为 5 运行命令
nice -n 5 sleep 60 &

在这个例子中,我们使用 nice 命令以 niceness 值为 5 运行 sleep 60 命令。命令末尾的 & 将进程放入后台运行。

你可以使用 ps 命令验证 sleep 进程的 niceness 值:

ps -p $(pgrep sleep) -o pid,ni

示例输出:

  PID   NI
22457   5

输出显示 sleep 进程的 niceness 值为 5。

使用 nice 调整进程优先级

在这一步中,我们将学习如何使用 nice 命令调整进程的优先级。

首先,让我们以更高的优先级(更低的 niceness 值)启动一个新进程:

## 以 niceness 值为 -5 启动一个进程
nice -n -5 sleep 120 &

在这个例子中,我们使用 nice 命令以 niceness 值为 -5 启动 sleep 120 命令,这赋予了该进程更高的优先级。

你可以使用 ps 命令验证 sleep 进程的 niceness 值:

ps -p $(pgrep sleep) -o pid,ni

示例输出:

  PID   NI
22458  -5

输出显示 sleep 进程的 niceness 值为 -5。

接下来,让我们以更低的优先级(更高的 niceness 值)启动另一个进程:

## 以 niceness 值为 10 启动一个进程
nice -n 10 sleep 120 &

在这个例子中,我们使用 nice 命令以 niceness 值为 10 启动 sleep 120 命令,这赋予了该进程更低的优先级。

你可以使用 ps 命令验证 sleep 进程的 niceness 值:

ps -p $(pgrep sleep) -o pid,ni

示例输出:

  PID   NI
22459  10

输出显示 sleep 进程的 niceness 值为 10。

要更改现有进程的 niceness 值,你可以使用 renice 命令:

## 将第一个 sleep 进程的 niceness 值更改为 0
renice -n 0 -p $(pgrep sleep | head -n 1)

你可以使用 ps 命令验证 sleep 进程的 niceness 值:

ps -p $(pgrep sleep) -o pid,ni

示例输出:

  PID   NI
22458   0
22459  10

输出显示第一个 sleep 进程的 niceness 值现在为 0,而第二个 sleep 进程的 niceness 值仍为 10。

使用 nice 的实践示例

在这最后一步中,我们将探索一些使用 nice 命令的实际示例。

优先处理 CPU 密集型任务

假设你有一个 CPU 密集型任务,你希望在后台运行它而不影响系统性能。你可以使用 nice 命令降低该任务的优先级:

## 以 niceness 值为 10 运行一个 CPU 密集型任务
nice -n 10 python3 cpu_intensive.py &

在这个例子中,我们以 niceness 值为 10 运行一个名为 cpu_intensive.py 的 Python 脚本,这意味着它的优先级将低于系统中的其他进程。

优先处理 I/O 密集型任务

如果你有一个 I/O 密集型任务,例如文件传输或备份操作,你可以使用 nice 命令提高该任务的优先级:

## 以 niceness 值为 -5 运行一个 I/O 密集型任务
nice -n -5 rsync -aAXv /source /destination &

在这个例子中,我们使用 rsync 命令以 niceness 值为 -5 执行文件传输,这意味着它的优先级将高于系统中的其他进程。

优先处理后台任务

如果你有一个后台任务,你希望在运行时不影响系统性能,你可以使用 nice 命令降低该任务的优先级:

## 以 niceness 值为 5 运行一个后台任务
nice -n 5 ./background_script.sh &

在这个例子中,我们以 niceness 值为 5 运行一个名为 background_script.sh 的脚本,这意味着它的优先级将低于系统中的其他进程。

总结

在本实验中,我们学习了 Linux 中的 nice 命令,它允许我们调整进程的优先级。我们从理解 nice 命令及其如何设置进程的 niceness 值开始,niceness 值决定了进程的调度优先级。接着,我们通过使用不同的 niceness 值运行命令来练习调整进程的优先级。通过使用 nice 命令,我们可以控制系统上运行进程的相对优先级,这对于优化系统性能或确保关键任务获得所需资源非常有用。

Linux 命令速查表