【工作管理的概念】
工作管理(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:以正常的程序方式终止一项工作