CompTIA A+ 认证考试的学习资源
2024年3月17日差异解释
2024年3月17日Linux 中的 jobs 命令允许用户直接与当前 shell 中的进程进行交互。
Linux 中的作业具有三种可能的状态:前台、后台和停止。
这意味着什么?我稍后会解释更多。首先让我们看一下 Jobs 命令中内置的一些工具。
作业控制具有多种不同的功能。每个都可以独立运行。下面是与作业控制相关的命令表。
命令 | 描述 |
---|---|
工作 | 列出当前 shell 中的作业 |
背景%n | 将进程发送到后台 |
%n | 将进程置于前台 |
表中n代表对应作业ID的编号。
了解 Linux 中的作业控制
到底什么是工作?作业、流程和任务这些词经常互换使用。
实际上,有一些细微的差异对于清晰起见很重要。
差异可以归结为哪个实体正在处理任务。用户拥有作业,而内核拥有进程。
在 Linux 中,作业可以是单个进程,也可以有许多子进程或子进程。
一个例子可能是一个包含多个管道命令的作业,如下所示:
cat file1 | sort | uniq
它解析文件的输出,并使用sort和uniq 命令的组合对 uniq 值进行排序。
在个人计算中,操作系统自动处理大多数进程。这通常针对系统的需求或特定任务的优先级进行优化。这些进程由内核完成,并被赋予一个进程ID(PID)。
如何控制 Linux 中的作业
![](https://www.alaica.com/wp-content/uploads/linux-43.jpg)
当你打开一个新的外壳时,你就有能力创造自己的就业机会。事实上,当您在终端中输入任何命令(或一系列命令)时,就会发生这种情况。
在用户级别,您可以从 shell 手动将作业发送到后台工作、将它们带到前台或暂停它们(使用 Ctrl+z)。
那么,让我们通过几个例子将您到目前为止所学到的知识付诸实践。
示例 1:将作业发送到后台
将作业发送到后台工作很容易。您只需在命令后添加&(与号)符号即可。
christopher@linuxhandbook:~$ nano Linux_Handbook &
[1] 2860
您可以看到此命令在括号中返回作业编号。下面的数字是内核使用的进程ID。
示例 2:查看职位
如果您尝试输入 jobs 命令,您可能会感到困惑,因为似乎什么也没发生。这是因为 shell 中没有活动的作业。现在您已经有一个作业正在运行,您可以成功运行 jobs 命令。
christopher@linuxhandbook:~$ jobs
[1]+ Stopped nano Linux_Handbook
此处未列出 PID 号,但您不需要它。您可以使用用户/shell 特定的作业 ID 来控制作业。
示例 3:将作业带到前台
您可以使用该作业 ID 将nano实例带到前台。
christopher@linuxhandbook:~$ fg %1
如果您一直在关注,这应该会带您进入 Nano,其中包含名为 Linux Handbook 的文件。
示例 4:使用 Ctrl+z 停止作业
您可以使用 Ctrl+z 停止打开的作业。这是一个屏幕截图,显示了如何将其与 top 一起使用。
![](https://www.alaica.com/wp-content/uploads/linux-50.gif)
在截屏视频中,您可以观看我打开顶部,使用 Ctrl+z 暂停它,在我的作业列表中查看它,然后在关闭它之前将其返回前台。
示例 5:使用 bg 运行后台作业
虽然您可以使用 & 符号将作业发送到后台,但有一个替代方案总是好的。在截屏视频中,您看到我使用 ctrl+z 停止了作业。我使用fg %n命令将作业带回到 shell 和前台。您可以使用bg做同样的事情。
我将使用 GUI 应用程序来进行切换。您过去可能已经注意到,当您从终端打开 GUI 时,如果关闭终端,GUI 也会关闭。希望本文已经为您澄清了为什么会发生这种情况。
那么,让我们使用 Gedit。我将执行以下操作:
- 启动Gedit
- 返回 Shell 并按 Ctrl+z
- 使用 bg 将其发送到后台运行
- 检查我的作业列表以验证其正在运行
- 返回前台并使用 Ctrl+c 发送系统中断来终止它
christopher@linuxhandbook:~$ gedit
^Z
[1]+ Stopped gedit
christopher@linuxhandbook:~$ bg %1
[1]+ gedit &
christopher@linuxhandbook:~$ jobs
[1]+ Stopped gedit
christopher@linuxhandbook:~$ fg %1
gedit
^C
关于 Linux 中终止作业的额外提示
我们许多人习惯使用 ctrl+c 来终止 shell 中的作业。还有另一种方法可以做到这一点,即结合您的新工作控制知识。
christopher@linuxhandbook:~$ fg %1
gedit
^Z
[1]+ Stopped gedit
christopher@linuxhandbook:~$ kill %1
没错,kill 命令也可以与作业 ID 一起使用来终止作业。
结论
学习 Linux 命令行让我们更接近我们最喜欢的操作系统的内部工作原理。学习工作控制使我们能够同时处理多项工作。
我希望您能通过本文找到新的探索内容。如果您喜欢它,请在下面的评论部分告诉我们或使用链接在社交媒体上分享。