Linux系列(14)之工作管理

1.工作管理

 说明:工作管理(job control)是用在bash环境下的,也就是说:“当我们登录系统取得bash shell之后,在单一终端机接口下同时进行多个工作的行为管理”。举例说明,我们在登录bash之后,想要一边复制文件、一边进行数据搜索、一边进行编译、还可以一边进行vim程序撰写!当然我们可以重复登录那6个命令行的终端机环境中,但是这样比较复杂,那可以在一个bash环境中完成这些操作吗?当然可以,这就需要使用到工作管理(job control)了。

1.什么是工作管理

从上述说明当中,你应该着重了解并注意的是:“进行工作管理的行为中,其实每个工作都是目前bash的子程序”。我们无法以工作管理(job control)的方式由tty1的环境去管理tty2的bash

2.进行工作管理的限制

《1》这些工作所触发的程序必须来自你的shell的子程序(只管理自己的bash)。

《2》前景:你可以控制与下达指令的这个环境称为前景。

《3》背景:可以自行运行的工作。无法使用Ctrl+C终止这个工作,可以使用bg/fg调用该工作。

《4》背景中执行的程序不能等待终端(terminal)/shell的输入。

注意:背景里的工作状态分为“暂停(stop)”与“运行中(running)”。放入背景中运行的工作不能与用户互动,因此需要互动的工作不能放到背景中执行。

2.工作控制(job control)的管理

1.将指令放到背景中执行

在我们只有一个bash的情况下,如果想要同时进行多个工作,那么可以将某些工作放到背景中执行,让我们可以继续操作前景的工作。那么如何将工作放到背景中执行呢?最简单的方法就是将与符号“&”放在整个指令的末尾。

格式:指令 [-option]  param...  &   //将指令执行的操作放到背景中执行

注意事项:将工作放到背景执行时注意数据流的导向,当背景工作会进行标准输出与错误输出时会影响前景工作,因此尽量将背景工作的标准输出与错误输出重定向。

下面是一个实例,在背景中将压缩文件解压到指定目录

 

 在背景中执行某个指令后会显示改指令的工作号【1】,14432指的是该指令所触发的PID

2.将目前的工作放到背景中暂停:[Ctrl]+[Z]

在vim的一般模式中按下Ctrl+Z会将编辑文件的工作放到背景中暂停,并且屏幕中会出现 [工作号]工作状态

3.观察目前的背景工作的状态:jobs

指令:jobs  //查看目前的背景工作状态,即包含多少个背景工作

下面实验一下:

 

 看到输出的内容包括工作号、+/-号、背景工作运行状态(运行中或暂停中)、指令

其中“+”号的意义是这样的,如果要从当前背景工作中取出一个工作放到前景中执行,那么就涉及到会将哪个背景工作选中放到前景中了,因此当使用指令fg(不带参数)时,系统会默认将“+”标记的工作放到前景中执行。

4.将背景工作拿到前景执行:fg

fg就是foreground的缩写,通常先使用jobs指令查看有哪些背景工作,再通过fg将背景工作拿到前景中执行。

 格式: fg  //将有+号标记的工作放到前景执行

 

    fg  %工作号  //直接将指定的工作号的指令放到前景中执行

5.让背景工作从暂停中转变到运行中:bg

格式: bg %工作号  //改变指定的工作号的工作状态

6.管理背景中的工作:kill

 kill可以使背景中的工作强制退出(杀死)、正常退出、重新启动这个工作。

格式:kill  -l  //列出可以使用的讯号(就是数字)

   kill  -signal  PID  //管理指定PID的程序

   kill  -signal  %工作号  //管理指定工作号的工作

  signal代表讯号,signal的值常用的有1(重新读取参数的配置文件)、2(终止程序的执行,功能类似Ctrl+C)、9(强制删除一个工作)、15(以正常的程序方式终止一项工作)

注意:当强制终止一个工作有可能会产生一些垃圾文件。kill后面接的数字默认是PID,如何想管理工作号需要这样写“%工作号”。

 kill可以强制杀死一个进程(当然也能杀死服务),但是不推荐使用kill杀死服务,这样做会有弊端;可以使用systemctl来管理服务;会在Linux系列(17)之系统服务那章节详细讲解

posted on 2019-10-09 10:37  _ZXP  阅读(166)  评论(0编辑  收藏  举报

导航