你的位置:首页 > 操作系统

[操作系统]bash shell的job control


 

    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,以正常程序终止方式终止工作。