job control是用于bash环境下的,也就是说:当我们打开一个bash shell之后,可以在单一终端下同时进行多个工作的行为管理。
先来理解前台与后台的概念。前台可以简单理解为终端以提示符的方式供你操作的环境。其余的工作则位于后台,或暂停或运行。注意:后台工作在运行态时不能与用户交互。换句话说,交互程序在后台运行没有意义。
现在我们来熟悉一下job control涉及到的命令。
- &
用法:cmd &。
作用:将该工作丢到后台执行。
回显:[job number] PID。完成时回显:[job number] Done。
好处:不怕被ctrl + c打断
注意:后台运行的程序,如果有stdout或stderr,依旧会输出到屏幕上,影响前台工作。处理此种情况最好的办法即使数据流重定向。
- ctrl + z
作用:将目前的工作丢到后台,并暂停。
一种使用情况:如果我正在使用vi编辑一个文件,需要知道某个文件的目录,这时需要到bash环境下查找,此时是否需要结束vi呢?当然不需要。只需要暂时将vi丢到后台等待(不能是运行,前面说过交互程序在后台运行没有意义)即可。
- jobs
用法:jobs [-lrs]
参数:
-l :除了列出job number与命令串之外,同时列出PID
-r :仅列出正在后台run的工作
-s :仅列出正在后台stop的工作
+/-符号的含义:+表示最后被丢到后台的工作,也是fg默认从后台取出的工作。-表示倒数第二个被丢到后台的工作
- fg
用法:fg [%job number]
作用:将job number标识的工作返回前台
特殊用法:fg -。将-标识的工作返回前台。fg。将+标识的工作返回前台。
- bg
用法:bg [%job number]
作用:使后台job number标识的工作进入运行态。
特殊用法:bg –。使-标识的工作进入运行态。bg。使+标识的工作进入运行态。
注意:当对一个交互程序使用该命令时,会有两个变化:先变成run,又立刻返回到stop。还记得前面说的,交互程序丢到后台运行没有意义。另外,这两个变化还会导致+标识该交互程序。
- kill
用法:kill –signal %job number|PID
作用:以signal信号表示的方式删除job number标识的工作
常用signal信号:1,重新读取一次参数的配置文件。9,立刻强制删除一个工作,通常用于删除一个不正常的工作。15,以正常程序终止方式终止工作。