一、作业管理的场景

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

但是bash的作业管理,有以下限制

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

二、涉及到的命令

1. 将命令后台运行的&

bash环境下,存在前台(foreground)和后台(background)两种作业:

  • 前台:你可以控制的作业
  • 后台:在内存可以自行运行的作业,无法直接控制,除非用命令调出来

把前台作业放在后台,最简单的方式就是使用&:

tar -zpcf /tmp/etc.tar.gz /etc &
[1] 2080 # [job number] PID

将命令放到后台之后,bash会给这个命令一个作业号,后面带这这个命令触发的进程的PID,然后我们就可以继续操作bash了。

放在后台的任务完成之后,会在屏幕上显示以下信息:

[1]+  Done                    tar -czvf /tmp/etc.tar.gz /etc

表示作业号为[1]的作业已经完成。

把作业放在后台运行,其数据流实际上还是会直接在屏幕上打印出来,如果我们改动一下刚才的命令:

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的小写)参数查看相关的信号,常用的有1、9和15。

三、参考

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

(完)

Linux的作业管理的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. gdb各种调试命令和技巧

    陈皓:用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台 ...

  3. Linux操作系统的进程管理和作业管理

    Linux操作系统的进程管理和信号 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.lsof命令详解 1>.lsof概述 list open files查看当前系统文件的工 ...

  4. 【Linux】【Basis】进程及作业管理

    进程及作业管理       内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能       Process: 运行中的程序的一个副本:         存在生命周期       L ...

  5. Linux 进程及作业管理

    进程简介:  内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能  进程(Process):什么是进程,进程是程序的执行实例,即运行中的程序,同时也是程序的一个副本:程序是放置于磁 ...

  6. linux的PS进程和作业管理(进程调度,杀死进程和进程故障-僵尸进程-内存泄漏)

     Ps进程和作业管理 1.查看进程ps 1.格式 ps   ---查看当前终端下的进程 3种格式: SYSV格式   带 - 符号 BSD格式  不带 - 符号 GNU格式   长选项 2.ps -a ...

  7. 【进程/作业管理】篇章一:Linux进程及其管理(系统监控类工具)----glances、dstat

    glances   dstat   glances命令详解 相对于htop工具的使用,这里介绍一下glances工具的使用,我个人是比较喜欢这款工具的,主要就是由于glances这款工具可以将系统状态 ...

  8. 【进程/作业管理】篇章一:Linux进程及管理(专用内存监控类工具)------【vmstat、pmap】

    主要讲解专用内存监控工具的使用:vmstat.pmap命令的使用. 命令概览: vmstat 显示虚拟内存状态 pmap 报告进程与内存映射关系 vmstat命令是最常见的Linux/Unix监控工具 ...

  9. 【进程/作业管理】篇章一:Linux进程及其管理(进程管理类工具)----pstree、ps、top、htop、kill、(killall、pkill、pgrep、pidof)

    主要讲解进程管理类命令及工具的使用:pstree.ps.top.htop.kill.(killall.pkill.pgrep.pidof) pstree 以树状图的方式展现进程之间的派生关系,显示效果 ...

随机推荐

  1. XAMPP服务器在局域网只能本机访问且无法用IP访问的解决办法 (转)

    XAMPP服务器在局域网只能本机访问且无法用IP访问的解决办法 前几天安装了xampp for pc 1.7.4版本. 装好后在本地电脑通过https://localhost访问正常. 然后换了台电脑 ...

  2. netstat 命令 与 ss 命令

    http://www.cnblogs.com/peida/archive/2013/03/11/2953420.html http://www.ttlsa.com/linux-command/ss-r ...

  3. 自定义显示提示一段时间自动消失ShowMsgText控件

    public partial class ShowMsgText : Label { public string TextMsg { get { return Text; } set { timer1 ...

  4. Unit01: Web概述 、 HTML概述 、 文本处理 、 图像和超链接 、 表格 、 表单

    Unit01: Web概述 . HTML概述 . 文本处理 . 图像和超链接 . 表格 . 表单 demo1.html <!-- 声明网页的版本(文档类型) --> <!doctyp ...

  5. JVM内存管理之垃圾搜集器简介

    引言 上一章我们已经探讨过GC的各个算法,那么垃圾搜集器是什么呢? 通俗的讲,使用编程语言将算法实现出来,产生的程序就是垃圾搜集器了.既然谈到了编程语言的实现,那么在讨论垃圾搜集器的时候,就已经涉及到 ...

  6. shell中date命令对month进行加减操作的bug

    shell脚本中如何取上个月的月份呢?很容易能想到下面的命令: date +%Y%m -d '-1 month' 或者 date +%Y%m -d 'last month'   在大部分情况下这个命令 ...

  7. GOF23设计模式之桥接模式(bridge)

    一.桥接模式概述 桥接模式核心要点: 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联. 二.桥接模式场景提出与存在问题 商城系统中常见 ...

  8. 同步机制之--java CyclicBarrier 循环栅栏

    CyclicBarrier介绍一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待 ...

  9. 杂项:Hadoop

    ylbtech-杂项:Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Ha ...

  10. Resource interpreted as Document but transferred with MIME type application/json laravel异常请求返回警告

    一般情况下,laravel在方法里可以向前端返回数组格式 return [], 框架可以自动将数组转成JSON字符串返回,但浏览器会报MIME类型警告, 如是做APP接口可以忽视该警告: 但在前端aj ...