在Linux系统中,作业是由一个或多个关联进程组成的。用户可以运行多个作业并可以在作业间切换。而作业控制则是对作业的行为进行控制,允许用户对作业的前后台的进行切换和终止操作等。作业相关的控制命令如下所示:

  • 后台符号(&):让作业在后台运行
  • 快捷键Ctrl+Z:让作业切换到后台并停止运行
  • 命令jobs:显示作业列表
  • 命令fg:将作业切换到前台并运行
  • 命令bg:将作业切换到后台并运行
  • 命令kill:终止作业

    当用户在终端中启动一个作业时,它会默认在前台运行。前台作业的特点就是从标准输入接收用户指令并通过标准输出将返回信息展示给用户。

    后台作业则脱离了标准输入和标准输出,并不需要用户参与,默默在用户看不到的地方运行。类似于Windows中多窗口界面,选中一个窗口则自动激活窗口并切换到前台运行,而其他窗口则自动转入后台运行。

后台符号 &

    后台符号则是指 ** & **,使用起来也非常简单,只需要把该符号放置在执行命令的后面即可。通过在执行一个命令需要花费较长的时间或执行命令后就不再需要用户输入命令等操作时使用,示例如下:

[root@localhost ~]# sleep 20m &
[1] 12925
  • 后台符号与前面的命令之间需要添加空格
  • [1]表示后台作业任务的编号
  • 12925表示后台作业对应的PID
如通过管道技术,作业由一组命令组成,此时返回的PID是最后一个命令程序所对应的PID

快捷键Ctrl+Z

    如果在执行命令的忘记输入后台符号时,此时我们可以使用快捷键Ctrl+Z,将前台作业切换到后台。而该作业在切换到后台也自动会停止运行,示例如下:

[root@localhost ~]# top -d 3
top - 23:09:05 up 1 day, 8:56, 1 user, load average: 0.41, 0.48, 0.68
KiB Mem :13174040+total,91322784 free,34024536 used,6393076 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 96571448 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2325 mysql 20 0 20.7g 383068 12780 S 23.5 0.3 47:02.72 mysqld
1873 cinder 20 0 476152 103060 8900 S 5.9 0.1 40:59.23 cinder-backup
# 使用Ctrl+Z可以看到作业已经转入后台并停止运行
[3]+ 已停止 top -d 3

显示作业列表jobs

基本用法

jobs [选项] [jobID]

其常用选项如下所示:

选项 说明
-l 显示PID
-p 仅显示作业的PID
-r 仅显示运行状态的作业
-s 仅显示停止状态的作业

jobs示例

1、显示所有作业

[root@localhost ~]# jobs
[2]- 已停止 top -d 3
[3]+ 已停止 top -d 3
[4] 运行中 sleep 20m &

2、显示作业的ID

[root@localhost ~]# jobs -p
5442
14740
39178

3、仅显示停止状态的作业

[root@localhost ~]# jobs -s
[2]- 已停止 top -d 3
[3]+ 已停止 top -d 3

fg

   fg全称frontground,是指将作业切换到前台并运行。

基本用法

fg [作业标识]

fg示例

1、将后台作业转换到前台并运行

[root@localhost ~]# jobs
[3]+ 已停止 top -d 3
[4] 运行中 sleep 20m &
[6] 运行中 sleep 120m &
[7]- 运行中 sleep 10h &
[root@localhost ~]# fg %3
top - 23:09:05 up 1 day, 8:56, 1 user, load average: 0.41, 0.48, 0.68
KiB Mem :13174040+total,91322784 free,34024536 used,6393076 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 96571448 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2325 mysql 20 0 20.7g 383068 12780 S 23.5 0.3 47:02.72 mysqld
1873 cinder 20 0 476152 103060 8900 S 5.9 0.1 40:59.23 cinder-backup

bg

    bg全称background,是指的主要作用是将作业切换到后台并运行。

基本用法

bg [作业标识]

bg示例

1、将作业转换到后台并运行

[root@localhost ~]# jobs
[2]- 已停止 top -d 3
[3] 已停止 top -d 3
[4] 运行中 sleep 20m &
[5] 运行中 sleep 120s &
[6]+ 已停止 sleep 120m
[root@localhost ~]# bg %6
[6]+ sleep 120m &
[root@localhost ~]# jobs
[2]+ 已停止 top -d 3
[3] 已停止 top -d 3
[4] 运行中 sleep 20m &
[5] 运行中 sleep 120s &
[6]- 运行中 sleep 120m &

终止作业

    要想终止作业,则需要使用kill命令即,其常用法如下所示:

kill [jobID]

示例如下所示:

[root@localhost ~]# jobs
[3]+ 已停止 top -d 3
[6] 运行中 sleep 120m &
[7]- 运行中 sleep 10h &
[root@localhost ~]# kill %7
[7]- 已终止 sleep 10h
[root@localhost ~]# jobs
[3]+ 已停止 top -d 3
[6]- 运行中 sleep 120m &

作业名字

    在上面的示例,使用的是%n表示形式来指定一个作业任务,除这种方法外,还有其他更多的方式来指定作业任务,详细如下所示:

表示形式 解释 示例
%number Number必须为正整数,指根据编号确定job fg %1
%string 匹配命令行以string开头的作业,如果匹配到多个则报错 kill %sleep
%?string 匹配命令行含有string的作业,如果是通过管道连接的多个命令,则仅匹配第一个命令 bg %?sleep
%% 匹配在作业列表中最近一个被切换到后台的作业 kill %%
%+ 同%% kill %+
%- 匹配在%%所指定的作业前面的作业 kill %-

示例

1、%string的用法

[root@localhost ~]# jobs
[3]- 已停止 top -d 3
[6] 运行中 sleep 120m &
[7]+ 已停止 sleep 120h
[root@localhost ~]# kill %top
[root@localhost ~]# jobs
[6]- 运行中 sleep 120m &
[7]+ 已停止 sleep 120h

2、%%用法

[root@localhost ~]# jobs
[6]- 运行中 sleep 120m &
[7]+ 已停止 sleep 120h
# 作业编号后面的+/-分别对应 %+ 和 %-
[root@localhost ~]# bg %7
[7]+ sleep 120h &
[root@localhost ~]# jobs
[6]- 运行中 sleep 120m &
[7]+ 运行中 sleep 120h &
[root@localhost ~]# kill %%
[7]+ 已终止 sleep 120h
[root@localhost ~]# jobs
[6]+ 运行中 sleep 120m &

nohup

    终端是我们进入Linux系统的入口,无论是排查问题、执行操作面对的都是Linux终端。当用户进行注销、断开网络时,终端均会收到SIGHUP(hangup)信号,然后关闭其所属的子进程,而如果我们不希望某些进程被这个SIGHUP信号影响,就需要使用命令nohup

    nohup英文解释如下:

run a command immune to hangups, with output to a non-tty

在使用nohup命令后,程序是对SIGHUP免疫的,不受影响的。而nohup与 & 的区别如下

  • 后台符号(&):只是暂时让进程运行于终端后台,而SIGHUP仍然影响到这些后台的进程
  • nohup:在将进程运行于终端后台并不受SIGHUP影响。

基本用法

nohup [命令] &
  • 如果终端是标准输入,则从/dev/null进行重定向
  • 如果终端是标准输出,则输出重定向于当前目录中nohup.out文件,否则则重定向到$HOME/nohup.out
  • 如果终端是标准错误输出,则重定向于标准输出
  • 如果要保存输出到文件,可以使用nohup [命令] > path/FILE

示例用法

# 将命令设置为后台运行
[root@localhost ~]# nohup ping www.baiduc.com &
[1] 36247
# 因未指定输出重定向,默认将标准输出、标准错误输出都追加至nohup.out
[root@localhost ~]# nohup: 忽略输入并把输出追加到"nohup.out"
[root@localhost ~]# jobs
[1]+ 运行中 nohup ping www.baiduc.com &
# 重定向至家目录中
[root@localhost ~]# nohup ping www.baidu.com > ~/pingTest.txt &
[1] 12588
# 虽指定重定向文件,但未指定标准错误输出重定向文件,因此会出现以下警告
[root@localhost ~]# nohup: 忽略输入重定向错误到标准输出端
[root@localhost ~]# nohup ping www.baidu.com > ~/pingTest.txt 2>&1 &
[3] 34498
  • ~/pingTest.txt:表示将标准输出(1)重定向于文件pingTest.txt中

  • 2>&1:表示将标准错误输出(2)重定向到标准输出(1),因些可将标准输出和标准错误输出均重定向到文件pingTest.txt中
  • 如果不需要保存标准错误输出和标准输出,则可以重定向于/dev/null

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

Linux 基础教程 39-作业控制的更多相关文章

  1. 嵌入式LINUX基础教程 第2版

    嵌入式LINUX基础教程  第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...

  2. Linux基础教程

    Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands    基本的Linux ...

  3. Embedded Linux Primer----嵌入式Linux基础教程--2.4节--嵌入式Linux发行版

    嵌入式Linux发行版 究竟什么是Linux发行版?在Linux内核引导之后,它期望找到并挂载根文件系统.当一个匹配的根文件系统已经挂载上,启动脚本开始运行大量程序和系统要求的工具.这些程序经常调用其 ...

  4. Embedded Linux Primer----嵌入式Linux基础教程--章节介绍

    章节介绍 第一章,“导引”,简要介绍了Linux被迅速应用在嵌入式环境的驱动因素,介绍了与嵌入式Linux相关的几个重要的标准和组织. 第二章,“第一个嵌入式经历”,介绍了与后几章所构建的嵌入式Lin ...

  5. Embedded Linux Primer----嵌入式Linux基础教程--导论

    第一章 导论 在这一章里(将要学习到) 为什么是Linux 嵌入式Linux现状 开源和GPL(译者:通用公共许可证) 标准和有关团体 本章总结 放弃专有操作系统正在许多传统嵌入式操作系统公司引起一阵 ...

  6. Linux基础教程(一)——Linux系统简介

    Linux的概述 Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linus Torvalds(林纳斯·托瓦兹)起初开发的,由于 ...

  7. Linux 基础教程 35-软件包管理-YUM

    YUM基础     使用RPM在Linux中安装.卸载软件或服务进会经常碰到RPM包的依赖,而我们在安装软件A时,提示依赖于软件B,安装软件B时又会出现提示依赖于软件C等一系列的依赖关系.这时大家会提 ...

  8. Linux 基础教程 34-软件包管理-RPM

        对于Linux而言管理各类软件,如安装.卸载和升级等是常有的事情和必备的技能.以CentOS为例,常用的安装包命令有rpm和yum. RPM基础     RPM(RedHat Package ...

  9. Linux 基础教程 25-命令和文件查找

    which     不管是在Windows还是Linux系统中,我们都会偶尔执行一些系统命令,比如Windows常见的cmd.ping.ipconfig等,它们的位置都在%systemdrive%中. ...

随机推荐

  1. linux中bin与sbin目录的作用及区别介绍

    linux中bin与sbin目录的作用及区别介绍 本文介绍下,linux中的二个主要目录:bin与sbin,它们的作用与区别,学习linux的朋友可以参考下 在linux系统中,有两个重要的目录:bi ...

  2. oracle查看和修改最大连接数

    第一步,在cmd命令行,输入sqlplus 或者直接在plsql中打开command window 第二步,根据提示输入用户名与密码 1. 查看processes和sessions参数 1 2 3 4 ...

  3. 峰Spring4学习(6)spring AOP的应用例子

    一.AOP简介: 二.AOP实例: 三.使用的例子 需求:在student添加的前后,打印日志信息: 0)spring AOP需要引用的jar包: 1)StudentService.java接口: p ...

  4. [转]C# 测试网络连接

    原文链接:http://blog.csdn.net/lsfa1234/article/details/6291228 using System; using System.Web; using Sys ...

  5. ehcache配置:使用Spring+SpringMVC+Mybatis或者有shiro

    SSM框架的搭建就不在叙述了 本文主要是讲解在SSM基础上再加上ehcache 1:首先:pom.xml需要的jar <dependency> <groupId>org.myb ...

  6. 6.5笔记-DQL高级查询

    一.高级查询 Exists Drop table if exists result; 子查询有返回结果: EXISTS子查询结果为TRUE 子查询无返回结果: EXISTS子查询结果为FALSE, 外 ...

  7. 【Codeforces】Codeforces Round #491 (Div. 2) (Contest 991)

    题目 传送门:QWQ A:A - If at first you don't succeed... 分析: 按照题意模拟 代码: #include <bits/stdc++.h> usin ...

  8. django-redis缓存

    1.安装django依赖包 pip install djange-redis==4.8.0 2.配置文件settings  需要开启redis服务 sudo service redis start,否 ...

  9. js中的event

    event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromElement ...

  10. 设置GO环境变量

    linux的设置方法:有4个环境变量需要设置:GOROOT.GOPATH.GOBIN以及PATH.需要设置到某一个profile文件中(~/.bash_profile(单一用户)或/etc/profi ...