做业管理(job control)是在bash环境下使用的,主要使用在同一个bash中管理多个做业的场景,譬如登陆bash以后想同时复制文件、数据搜索,编译。shell
可是bash的做业管理,有如下限制:centos
bash环境下,存在前台(foreground)和后台(background)两种做业:bash
把前台做业放在后台,最简单的方式就是使用&:学习
tar -zpcf /tmp/etc.tar.gz /etc & [1] 2080 # [job number] PID
将命令放到后台以后,bash会给这个命令一个做业号,后面带这这个命令触发的进程的PID,而后咱们就能够继续操做bash了。spa
放在后台的任务完成以后,会在屏幕上显示如下信息:命令行
[1]+ Done tar -czvf /tmp/etc.tar.gz /etc
表示做业号为[1]的做业已经完成。code
把做业放在后台运行,其数据流实际上仍是会直接在屏幕上打印出来,若是咱们改动一下刚才的命令:blog
tar -zpcvf /tmp/etc.tar.gz /etc &
就会发现,做业的stdout和stderr依然会输出到屏幕上,让咱们没法控制下一个前台做业,这个时候最好是用数据流重定向:进程
tar -zpcvf /tmp/etc.tar.gz /etc > /tmp.log 2>&1 &
譬如在编辑一个文件的时候想作别的东西:内存
vi ~/.bashrc # 在vi的通常模式下,按下ctrl+z组合键 [2]+ Stopped vi ~/.bashrc
做业号后面的+号表示这是当前在后台默认的做业,Stopped表示这样做业的状态。
jobs [option] option: -l:除了列出做业号外,同时列出PID -r:仅列出正在后台运行的做业 -s:仅列出正在后台暂停的做业
观察当前bash中全部做业及其PID:
jobs -l [2]- 2099 Stopped vi ~/.bashrc [3]+ 2110 Stopped vi ~/.bash_history
能够看到做业号后面的+-号,+表示默认做业,若是只输入fg的时候,那么默认做业[3]会被提到前台。
fg %jobnum option: %jobnum:做业的号码,%无关紧要
如把刚才的默认做业提到前台:
fg
把做业号为2的做业提到前台:
fg %2
譬如:
find / -perm +7000 # 马上按下ctrl+z组合键 [1]+ Stopped find / -perm +7000
而后,让这个做业在后台从暂停转为运行,观察之:
jobs;bg %1;jobs [1]+ Stopped find / -perm +7000 [1]+ find / -perm +7000 & [1]+ Running find / -perm +7000 &
能够观察到状态已经变为Runnig了,并且命令行最后多了一个“&”符号,表示该做业已经在后台启动了。
kill -signal %jobnum kill -l option: -l:L的小写,列出当前kill可以使用的信号(signal) signal:表示给后面的做业什么指示,用man 7 signal可查看详细,经常使用的几个signal有: -1:从新读一次参数的设置文件,相似于reload -2:表示与由键盘输入ctrl+c同样的动做 -9:马上强制删除一个做业 -15:以正常方式终止一项做业,与-9不同
如找出当先后台做业,并将其删除:
[root@centos ~]# jobs [1]+ Stopped vi ~/.bashrcc [root@centos ~]# kill -9 %1 [1]+ Stopped vi ~/.bashrcc [root@centos ~]# jobs [1]+ Killed vi ~/.bashrcc
值得注意的是-9一般用于强制删除一个不正常的做业,-15则以正常步骤结束一项做业。
kill的做用不少,能够经过-l(L的小写)参数查看相关的信号,经常使用的有一、9和15。
《鸟哥的Linux私房菜_基础学习篇》(第二版)
(完)