简介
在本实验中,你将学习如何使用各种命令在 Linux 中管理后台任务。你将了解如何在后台运行进程、监控其状态并控制它们。这些知识对于在 Linux 环境中高效地进行多任务处理至关重要,使你能够同时运行多个任务而不会占用终端。
学习目标
在本实验结束时,你将能够:
- 使用
&
操作符在后台运行命令 - 使用
jobs
命令列出和监控后台任务 - 使用
fg
命令将后台任务切换到前台 - 使用
kill
命令停止后台任务 - 理解后台任务的终端特定性质
在本实验中,你将学习如何使用各种命令在 Linux 中管理后台任务。你将了解如何在后台运行进程、监控其状态并控制它们。这些知识对于在 Linux 环境中高效地进行多任务处理至关重要,使你能够同时运行多个任务而不会占用终端。
在本实验结束时,你将能够:
&
操作符在后台运行命令jobs
命令列出和监控后台任务fg
命令将后台任务切换到前台kill
命令停止后台任务让我们从在后台运行一个简单的命令开始。
打开终端。你应该位于 /home/labex/project
目录中。如果不在该目录,可以通过以下命令切换:
cd /home/labex/project
我们将使用 sleep
命令来模拟一个长时间运行的进程。运行以下命令:
sleep 600 &
sleep
命令会暂停指定的秒数(在本例中为 600 秒,即 10 分钟)。末尾的 &
告诉 Linux 在后台运行此命令。
运行此命令后,你将看到类似以下的输出:
[1] 1234
此输出显示了两条重要信息:
[1]
是作业编号(job number),用于引用此特定的后台任务。1234
是进程 ID(PID),这是正在运行的进程的唯一标识符。你会注意到,命令提示符会立即返回。这是因为进程在后台运行,允许你继续使用终端。
现在,让我们检查后台任务的状态:
jobs
此命令会列出所有当前的后台任务。你应该会看到类似以下的输出:
[1]+ Running sleep 600 &
这表示作业编号 1 正在运行,即我们刚刚启动的 sleep 600
命令。
重要提示:后台任务特定于启动它们的终端会话。如果你打开一个新的终端窗口或标签页,在那里运行 jobs
将不会显示原始终端中的后台任务。这是理解 Linux 中后台任务工作原理的关键概念。
现在我们已经运行了一个后台任务,接下来让我们尝试同时运行多个任务。我们将使用不同的命令组合来展示后台任务的灵活性。
让我们启动更多的后台任务。依次输入以下命令:
ping -c 100 google.com > ping_results.txt &
find /home -name "*.log" > log_files.txt &
sleep 1200 &
每个命令都会启动一个新的后台任务。你会看到每个任务的作业编号和 PID。
现在,让我们检查所有后台任务的状态:
jobs
你应该会看到列出所有四个任务(包括步骤 1 中的任务)的输出:
[1] Running sleep 600 &
[2] Running ping -c 100 google.com > ping_results.txt &
[3]- Running find /home -name "*.log" > log_files.txt &
[4]+ Running sleep 1200 &
任务 4 旁边的 +
表示这是最近启动的后台任务。任务 3 旁边的 -
表示如果任务 4 完成,此任务将成为当前任务。
请注意,你可以快速启动多个后台任务,而你的终端仍然可以响应其他命令。
有时,你可能希望将后台任务切换到前台,以便与其交互或查看其输出。让我们学习如何实现这一点。
首先,列出当前的任务:
jobs
这将刷新你对当前后台运行任务的视图。
我们将把一个长时间运行的任务切换到前台。从列表中选择一个作业编号(假设是作业编号 3,但请使用与列表中仍在运行的任务对应的编号)。要将其切换到前台,请使用 fg
命令后跟作业编号:
fg %3
%3
指的是作业编号。%
符号告诉 shell 你引用的是作业编号,而不是进程 ID。
运行此命令后,你将看到命令在前台运行,你的终端将“卡住”,直到任务完成或你停止它。
要停止任务并重新获得对终端的控制权,请按 Ctrl+C
。这会向当前前台进程发送中断信号。
让我们再次检查任务:
jobs
你应该会看到,你切换到前台的任务不再列出,因为我们停止了它。
现在,让我们学习如何在不将后台任务切换到前台的情况下停止它。
首先,列出当前的任务:
jobs
这将显示哪些任务仍在运行。
我们将停止其中一个剩余的后台任务。从列表中选择一个作业编号(假设是作业编号 2,但请使用与列表中仍在运行的任务对应的编号)。要停止它,我们使用 kill
命令后跟作业编号:
kill %2
%2
指的是你选择的作业编号。同样,%
符号表示我们引用的是作业编号。
kill
命令会向指定的任务发送终止信号。默认情况下,它会发送一个允许进程正常关闭的信号。
再次检查任务:
jobs
你应该会看到,你终止的任务不再列出。这确认它已成功终止。
现在我们已经练习了各种命令,接下来让我们尝试在另一个实用命令中使用后台任务。
我们将使用 tar
命令在后台创建你主目录的压缩归档文件:
tar -czf home_backup.tar.gz /home/labex &
此命令会创建你主目录的压缩 tar 归档文件。
你会看到一个作业编号和 PID,就像我们之前的命令一样。
检查任务的状态:
jobs
你应该会看到 tar
命令被列为正在运行的任务。
在它运行时,你可以继续使用终端执行其他任务。这就是后台任务的强大之处!
过一段时间后,检查命令是否已完成:
jobs
如果它不再列出,则表示已完成。
现在,让我们验证归档文件是否已创建:
ls -l home_backup.tar.gz
如果归档文件成功创建,此命令将显示其详细信息。
在本实验中,你学习了在 Linux 中管理后台任务的关键技能:
&
操作符在后台运行命令jobs
命令列出和监控后台任务fg
将后台任务切换到前台kill
停止后台任务你还学习了一个重要概念:后台任务特定于启动它们的终端会话。这意味着每个终端窗口或标签页都维护其自己的后台任务集。
这些技能将帮助你在 Linux 环境中高效地进行多任务处理,使你能够同时运行多个进程并有效地管理它们。请记住,后台任务特别适用于不需要持续交互的长时间运行任务,从而释放你的终端以进行其他工作。