如何在 Linux 中使用 Jobs 命令

Linux 中的作业命令允许用户直接与当前 shell 中的进程交互。

作业在 Linux 中具有三种可能的状态:前台、后台和已停止。

这意味着什么? 我稍后会解释更多。 首先让我们看一下 Jobs 命令中内置的一些工具。

作业控制有几个不同的功能。 每个都可以独立运行。 这是与作业控制相关的命令表。

命令描述
工作列出当前 shell 中的作业
%n将进程发送到后台
fg %n将进程置于前台

在表中, n 表示对应作业ID的编号。

了解 Linux 中的作业控制

究竟什么是工作? 工作、流程和任务是经常互换使用的词。

实际上有一些小的差异对于清楚起见很重要。

差异可以归结为哪个实体正在处理任务。 用户拥有工作,而 核心 拥有流程。

在 Linux 中,一个作业可以是单个进程,也可以有许多子进程或子进程。

一个 example 这可能是一项具有多个管道命令的工作,如下所示:

cat file1 | sort | uniq

它解析文件的输出并使用 sort 和 uniq 命令的组合对 uniq 值进行排序。

在个人计算中,操作系统自动处理大多数进程。 这通常针对系统需求或特定任务的优先级进行优化。 这些进程由内核完成并被赋予一个进程 ID (PID)。

如何在 Linux 中控制作业

当你打开一个新的 shell 时,你就有能力创造你自己的工作。 事实上,当您在终端中输入任何命令(或一系列命令)时,就会发生这种情况。

在用户级别 – 从 shell,您可以手动发送作业以在后台工作、将它们带到前台或暂停它们(使用 Ctrl+z)。

因此,让我们通过几个示例将您到目前为止所学的知识付诸实践。

示例 1:将作业发送到后台

将作业发送到后台工作很容易。 你只需要在你的命令后面加上一个 & (和号)符号。

[email protected]:~$ nano Linux_Handbook &
[1] 2860

您可以看到此命令在括号中返回作业编号。 下面的数字是内核使用的进程ID。

示例 2:查看作业

如果您尝试键入作业命令,您可能会感到困惑,似乎什么也没发生。 这是因为 shell 中没有活动的作业。 现在您有一个作业正在运行,您可以成功运行作业命令。

[email protected]:~$ jobs
[1]+  Stopped                 nano Linux_Handbook

PID 编号未在此处列出,但您不需要它。 您可以使用特定于用户/shell 的作业 ID 来控制作业。

示例 3:将作业带到前台

您可以使用该作业 ID 将您的实例 纳米 到前台。

[email protected]:~$ fg %1

如果您一直在关注,这应该会带您进入 Nano 并使用名为 Linux 手册的文件。

示例 4:使用 Ctrl+z 停止作业

您可以使用 Ctrl+z 停止打开的作业。 这是一个屏幕截图,显示了如何将它与 top 一起使用。

在截屏视频中,您可以观看我打开顶部,使用 Ctrl+z 暂停它,在我的工作列表中查看它,然后在关闭它之前将它带回前台。

示例 5:使用 bg 运行后台作业

虽然您可以使用 & 符号将作业发送到后台,但最好有一个替代方案。 在截屏视频中,您看到我使用 ctrl+z 停止工作。 我把工作带回了外壳和前景 fg %n 命令。 您可以使用 bg.

我将使用 GUI 应用程序来进行切换。 您过去可能已经注意到,当您从终端打开 GUI 时,如果您 close 终端,GUI 将 close 也。 希望本文已经为您阐明了为什么会发生这种情况。

所以,让我们使用 Gedit。 我将执行以下操作:

  • 启动 Gedit
  • 返回到 Shell 和 Ctrl+z
  • 使用 bg 将其发送到后台运行
  • 检查我的作业列表以验证它是否正在运行
  • 返回前台并使用 Ctrl+c 发送系统中断以终止它
[email protected]:~$ gedit
^Z
[1]+  Stopped                 gedit
[email protected]:~$ bg %1
[1]+ gedit &
[email protected]:~$ jobs
[1]+  Stopped                 gedit
[email protected]:~$ fg %1
gedit
^C

Linux 中终止工作的额外提示

我们中的许多人习惯于使用 ctrl+c 来终止 shell 中的作业。 还有另一种方法可以结合您的新工作控制知识。

[email protected]:~$ fg %1
gedit
^Z
[1]+  Stopped                 gedit
[email protected]:~$ kill %1

没错,kill 命令也可以与作业 ID 一起使用来终止作业。

结论

学习 Linux 命令行使我们更接近我们最喜欢的操作系统的内部工作原理。 学习作业控制使我们能够同时处理多个作业。

我希望您在这篇文章中发现了一些新的东西可以探索。 如果您喜欢它,请在下面的评论部分告诉我们,或使用链接在社交媒体上分享。