Alex_McAvoy

想要成为渔夫的猎手

Linux 的工作管理

【工作管理的概念】

工作管理(Job Control)是在登录系统取得 Bash Shell 后,在单一终端机下同时进行多个工作的行为管理

在进行工作管理的行为中,其实每个工作都是目前 Bash 的子进程,即彼此之间存在相关系,也就是说,无法以工作管理的方式由 tty1 的环境去管理 tty2 的 Bash

假设只存在一个终端,那么称可以出现提示符并允许操作的环境就称为前台(Foreground),其他的工作就放入后台(Background)暂停(Stop)运行(Running),且运行过程中无法使用 [Ctrl]+[C] 来终止,此外,放入后台的工作在运行时必须不能与用户互动

【工作后台执行】

在只有一个 Bash 的环境下,若想同时进行多个工作,那么可以将某些不用与用户互动的工作于后台运行,让我们可以继续操作前台的工作

在输入一个命令后,只需要在命令最后加上一个 &,此时 Bash 会给予该命令一个工作号码(job number),然后就会将整个工作丢到后台运行,用户可以继续进行前台操作

如下图所示,[1] 是给予的 job number,6160 是该命令所触发的 PID

当后台的某项工作完成后,此时在前台输入任何命令,都会弹出工作完成的提示

如下图所示,当后台工作完成后,会说明已完成,同时还会显示所执行的命令串

需要注意的是,对于后台运行的工作,当其有标准输出 stdout 和标准错误输出 stderr 时,其数据依然会输出到屏幕上,而后台工作又无法使用 [Ctrl]+[C] 来停止,这就使得屏幕不可避免的出现显示混乱,因此,常使用数据流重定向来将输出数据传到某个文件中

【暂停当前工作】

当某项工作正在进行时,由于某种原因需要暂停该工作,此时可以使用 [Ctrl]+[Z] 来将工作暂停,并放于后台中

【查看后台工作状态】

使用 jobs 命令可以查看当前后台有多少工作在运行,其命令格式为:jobs [选项]

常见选项有:

  • -l:除列出 job number 与命令串外,同时列出 PID
  • -r:仅列出正在后台运行的工作
  • -s:仅列出正在后台暂停的工作

需要注意的是,对于 job number 来说,其后跟的 + 代表最近被放入后台的 job number,- 代表最近最后第二个放入到后台的 job number,当超过最后第三个及以后的工作时,就不会有 +/- 的存在

【后台工作提前】

使用 fg 命令可将后台正在处理的工作提前,其命令格式为:fg %job_number,当直接使用 fg 命令时,会默认提前最近被放入后台的工作

【暂停工作改为运行】

对于在后台中暂停的工作,可以使用 bg 命令改为运行中,其命令格式为:bg %job_number,当直接使用 bg 命令时,会默认提前最近被放入后台的工作

【删除后台工作】

使用 kill 命令可以删除后台的工作,其命令格式为:kill -signal %job_number

其中,-signal 为给予该工作的一个信号,可以使用 kill -l 来查看当前可使用的信号,常见的信号有:

  • -1:重新读取一次参数的配置文件
  • -2:与键盘输入 [Ctrl]+[C] 进行一样的操作
  • -9:强制删除一个工作
  • -15:以正常的程序方式终止一项工作

感谢您对我的支持,让我继续努力分享有用的技术与知识点!