当登录系统取得bash shell之后,在单一终端机下同时进行多个作业的行为管理。
在进行作业管理的行为中,其实每个作业都是目前bash的子进程,即彼此之间是有相关性的。登录一个终端出现提示符让你操作的环境成为前台 (foreground),至于其它作业就可以放入后台(background)去暂停或运行。注意:放入后台的作业必须不能与用户互动。
Bash的作业控制必须要注意到的限制是:
这些作业所触发的进程必须来自于你shell的子进程
前台:你可以控制于执行命令的这个环境成为前台的作业
后台:可以自行运行的作业,你无法使用[ctrl+c]终止它,可使用bg/fg调用该作业
后台中执行的进程不能等待terminal/shell的输入
1 Job control管理 [作业管理]
Bash下面的Job分前台与后台,然后再后台里面的作业状态又可分为暂停与运行中。
直接将命令丢到后台中执行的&
例子:
1
|
tar –zpcf /tmp/etc/targ.gz /etc &
|
后面加入上&表示在后台处理,回车后看到bash会给予这个命令一个作业号码(job number),就是那个[1]。但是这个标准输出和错误输出还是都屏幕上。所以应该使用重定向处理。
1
|
tar –zpcf /tmp/etc.tar.gz /etc/ > /tmp/log.txt 2>&1 &
|
将目前的作业丢到后台中暂停:ctrl-z
比如正在使用vi,却发现有个文件不知道放在哪里,需要到bash环境下进行查找,此时只要将vi丢到后台当中等待即可。
例子:
1
2
3
4
|
vi ~/.bashrc
# 在vi的一般模式下,按下[ctrl]-z这两个键
[1]+ Stopped
# 顺利取得前台控制权
|
按下[ctrl]-z这两个键,屏幕上出现[1],表示这是第一个作业,而那个+代表最近一个被丢进后台的作业,且目前在后台下默认会被取用的那个作业(与fg这个命令有关)。而那个stopped则代表目前这个作业的状态。默认,使用[ctrl-z]丢到后台当中的作业都是暂停状态。
查看目前的后台作业状态:jobs
用法:
1
2
3
4
5
|
jobs [-lrs]
参数:
-l 除了列出job number与命令串之外,同时列出PID的号码
-r 仅列出正在后台run的作业
-s 仅列出正在后台当中暂停(stop)的作业
|
一般,直接执行jobs即可。如果还想知道该Job number的PID号码,可以加上-l这个参数。在输出的信息中,那个+代表默认的取用作业。如果目前有两个作业在后台当中,两个作业都是暂停的,而如果仅输入fg时,那么那个标志了+的作业会被拿到前台当中来处理。其实+代表最近被放到后台的作业号码,-代表最近第二个被放置到后台当中的作业号码。而超过最后第三个以后的作业,就不会有+/-符号存在了。
将后台作业拿到前台来处理:fg
1
2
3
4
|
fg %jobnumber
参数:
%jobnumber: jobnumber为作业号码(数字)。注意:%可有可无
如果fg –则把标志了-的那个作业拿出来。
|
让作业在后台下的状态变成运行中:bg
由于按下ctrl-z后作业会放到后台停止,如果要让其继续在后台运行起来,需要使用bg,它和fg的用法一样。
管理后台当中的作业:kill
如果需要删除某个作业,需要使用kill。
1
2
3
4
5
6
7
8
9
|
用法:
kill –signal %jobnumber
参数:
-l 列出目前能够使用的信号(signal)有哪些
signal 代表给予后面接的那个作业什么样的指示。
-1 重新读取一次参数的配置文件
-2 代表与由键盘输入ctrl-c同样的操作
-9 立刻强制删除一个作业
-15 以正常的程序方式终止一项作业
|
注意:-9通常是在强制删除一个不正常的作业时所使用的,-15则是以正常步骤接受一项作业(15也是默认值)
另外,kill后面接的数字默认是PID,如果想要管理bash的作业控制,就得要加上%数字了。
(责任编辑:最模板) |