Linux的做业管理

1、做业管理的场景

做业管理(job control)是在bash环境下使用的,主要使用在同一个bash中管理多个做业的场景,譬如登陆bash以后想同时复制文件、数据搜索,编译。shell

可是bash的做业管理,有如下限制centos

  • 程序必须是shell的子进程
  • 程序不能等待terminal/shell的输入


2、涉及到的命令

1. 将命令后台运行的&

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 &


2. 把当前做业放在后台并暂停:ctrl+z

譬如在编辑一个文件的时候想作别的东西:内存

vi ~/.bashrc # 在vi的通常模式下,按下ctrl+z组合键 [2]+  Stopped                 vi ~/.bashrc

做业号后面的+号表示这是当前在后台默认的做业,Stopped表示这样做业的状态。


3. 观察当先后台做业状态:jobs

jobs [option] option: -l:除了列出做业号外,同时列出PID -r:仅列出正在后台运行的做业 -s:仅列出正在后台暂停的做业

观察当前bash中全部做业及其PID:

jobs -l [2]-  2099 Stopped                 vi ~/.bashrc [3]+  2110 Stopped                 vi ~/.bash_history

能够看到做业号后面的+-号,+表示默认做业,若是只输入fg的时候,那么默认做业[3]会被提到前台。


4. 将后台做业提到前台处理:fg

fg %jobnum option: %jobnum:做业的号码,%无关紧要

如把刚才的默认做业提到前台:

fg

把做业号为2的做业提到前台:

fg %2


5. 使后台做业从暂停到运行:bg

譬如:

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了,并且命令行最后多了一个“&”符号,表示该做业已经在后台启动了。


6. 管理后台做业:kill

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。


3、参考

《鸟哥的Linux私房菜_基础学习篇》(第二版)

(完)

相关文章
相关标签/搜索