后台任务管理

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用各种命令在 Linux 中管理后台任务。你将了解如何在后台运行进程、监控其状态并控制它们。这些知识对于在 Linux 环境中高效地进行多任务处理至关重要,使你能够同时运行多个任务而不会占用终端。

学习目标

在本实验结束时,你将能够:

  • 使用 & 操作符在后台运行命令
  • 使用 jobs 命令列出和监控后台任务
  • 使用 fg 命令将后台任务切换到前台
  • 使用 kill 命令停止后台任务
  • 理解后台任务的终端特定性质

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("`Linux`")) -.-> linux/BasicSystemCommandsGroup(["`Basic System Commands`"]) linux(("`Linux`")) -.-> linux/FileandDirectoryManagementGroup(["`File and Directory Management`"]) linux(("`Linux`")) -.-> linux/ProcessManagementandControlGroup(["`Process Management and Control`"]) linux(("`Linux`")) -.-> linux/CompressionandArchivingGroup(["`Compression and Archiving`"]) linux(("`Linux`")) -.-> linux/RemoteAccessandNetworkingGroup(["`Remote Access and Networking`"]) linux/BasicSystemCommandsGroup -.-> linux/sleep("`Execution Delaying`") linux/FileandDirectoryManagementGroup -.-> linux/find("`File Searching`") linux/ProcessManagementandControlGroup -.-> linux/jobs("`Job Managing`") linux/ProcessManagementandControlGroup -.-> linux/fg("`Job Foregrounding`") linux/ProcessManagementandControlGroup -.-> linux/kill("`Process Terminating`") linux/ProcessManagementandControlGroup -.-> linux/bg_process("`Background Management`") linux/CompressionandArchivingGroup -.-> linux/tar("`Archiving`") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("`Network Testing`") subgraph Lab Skills linux/sleep -.-> lab-43{{"`后台任务管理`"}} linux/find -.-> lab-43{{"`后台任务管理`"}} linux/jobs -.-> lab-43{{"`后台任务管理`"}} linux/fg -.-> lab-43{{"`后台任务管理`"}} linux/kill -.-> lab-43{{"`后台任务管理`"}} linux/bg_process -.-> lab-43{{"`后台任务管理`"}} linux/tar -.-> lab-43{{"`后台任务管理`"}} linux/ping -.-> lab-43{{"`后台任务管理`"}} end

在后台运行命令

让我们从在后台运行一个简单的命令开始。

  1. 打开终端。你应该位于 /home/labex/project 目录中。如果不在该目录,可以通过以下命令切换:

    cd /home/labex/project
  2. 我们将使用 sleep 命令来模拟一个长时间运行的进程。运行以下命令:

    sleep 600 &

    sleep 命令会暂停指定的秒数(在本例中为 600 秒,即 10 分钟)。末尾的 & 告诉 Linux 在后台运行此命令。

  3. 运行此命令后,你将看到类似以下的输出:

    [1] 1234

    此输出显示了两条重要信息:

    • [1] 是作业编号(job number),用于引用此特定的后台任务。
    • 1234 是进程 ID(PID),这是正在运行的进程的唯一标识符。
  4. 你会注意到,命令提示符会立即返回。这是因为进程在后台运行,允许你继续使用终端。

  5. 现在,让我们检查后台任务的状态:

    jobs

    此命令会列出所有当前的后台任务。你应该会看到类似以下的输出:

    [1]+  Running                 sleep 600 &

    这表示作业编号 1 正在运行,即我们刚刚启动的 sleep 600 命令。

  6. 重要提示:后台任务特定于启动它们的终端会话。如果你打开一个新的终端窗口或标签页,在那里运行 jobs 将不会显示原始终端中的后台任务。这是理解 Linux 中后台任务工作原理的关键概念。

运行多个后台任务

现在我们已经运行了一个后台任务,接下来让我们尝试同时运行多个任务。我们将使用不同的命令组合来展示后台任务的灵活性。

  1. 让我们启动更多的后台任务。依次输入以下命令:

    ping -c 100 google.com > ping_results.txt &
    find /home -name "*.log" > log_files.txt &
    sleep 1200 &

    每个命令都会启动一个新的后台任务。你会看到每个任务的作业编号和 PID。

  2. 现在,让我们检查所有后台任务的状态:

    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 完成,此任务将成为当前任务。

  3. 请注意,你可以快速启动多个后台任务,而你的终端仍然可以响应其他命令。

将后台任务切换到前台

有时,你可能希望将后台任务切换到前台,以便与其交互或查看其输出。让我们学习如何实现这一点。

  1. 首先,列出当前的任务:

    jobs

    这将刷新你对当前后台运行任务的视图。

  2. 我们将把一个长时间运行的任务切换到前台。从列表中选择一个作业编号(假设是作业编号 3,但请使用与列表中仍在运行的任务对应的编号)。要将其切换到前台,请使用 fg 命令后跟作业编号:

    fg %3

    %3 指的是作业编号。% 符号告诉 shell 你引用的是作业编号,而不是进程 ID。

  3. 运行此命令后,你将看到命令在前台运行,你的终端将“卡住”,直到任务完成或你停止它。

  4. 要停止任务并重新获得对终端的控制权,请按 Ctrl+C。这会向当前前台进程发送中断信号。

  5. 让我们再次检查任务:

    jobs

    你应该会看到,你切换到前台的任务不再列出,因为我们停止了它。

停止后台任务

现在,让我们学习如何在不将后台任务切换到前台的情况下停止它。

  1. 首先,列出当前的任务:

    jobs

    这将显示哪些任务仍在运行。

  2. 我们将停止其中一个剩余的后台任务。从列表中选择一个作业编号(假设是作业编号 2,但请使用与列表中仍在运行的任务对应的编号)。要停止它,我们使用 kill 命令后跟作业编号:

    kill %2

    %2 指的是你选择的作业编号。同样,% 符号表示我们引用的是作业编号。

  3. kill 命令会向指定的任务发送终止信号。默认情况下,它会发送一个允许进程正常关闭的信号。

  4. 再次检查任务:

    jobs

    你应该会看到,你终止的任务不再列出。这确认它已成功终止。

在其他命令中使用后台任务

现在我们已经练习了各种命令,接下来让我们尝试在另一个实用命令中使用后台任务。

  1. 我们将使用 tar 命令在后台创建你主目录的压缩归档文件:

    tar -czf home_backup.tar.gz /home/labex &

    此命令会创建你主目录的压缩 tar 归档文件。

  2. 你会看到一个作业编号和 PID,就像我们之前的命令一样。

  3. 检查任务的状态:

    jobs

    你应该会看到 tar 命令被列为正在运行的任务。

  4. 在它运行时,你可以继续使用终端执行其他任务。这就是后台任务的强大之处!

  5. 过一段时间后,检查命令是否已完成:

    jobs

    如果它不再列出,则表示已完成。

  6. 现在,让我们验证归档文件是否已创建:

    ls -l home_backup.tar.gz

    如果归档文件成功创建,此命令将显示其详细信息。

总结

在本实验中,你学习了在 Linux 中管理后台任务的关键技能:

  1. 使用 & 操作符在后台运行命令
  2. 使用 jobs 命令列出和监控后台任务
  3. 使用 fg 将后台任务切换到前台
  4. 使用 kill 停止后台任务
  5. 将这些概念应用于实际场景,例如网络诊断、文件搜索和创建归档文件

你还学习了一个重要概念:后台任务特定于启动它们的终端会话。这意味着每个终端窗口或标签页都维护其自己的后台任务集。

这些技能将帮助你在 Linux 环境中高效地进行多任务处理,使你能够同时运行多个进程并有效地管理它们。请记住,后台任务特别适用于不需要持续交互的长时间运行任务,从而释放你的终端以进行其他工作。

您可能感兴趣的其他 Linux 教程