概述

在Linux 中我们登陆了一个终端,已经在执行一个操作,可以通过一定的操作或命令在不关闭当前操作的情况下执行其他操作。

例如,我在当前终端正在 vi 一个文件,在不停止 vi 的情况下,如果我想在同一个终端执行其他的命令,就应该把 vi 命令放入后台,然后再执行其他命令。把命令放入后台,然后把命令恢复到前台,或者让命令恢复到后台执行。

后台管理有几个事项需要大家注意:

  1. 前台是指当前可以操控和执行命令的这个操作环境;后台是指工作可以自行运行,但是不能直接用 Ctrl+C 快捷键来中止它,只能使用 fg/bg 来调用工作。
  2. 当前的登录终端只能管理当前终端的工作,而不能管理其他登录终端的工作。比如 tty1 登录的终端是不能管理 tty2 终端中的工作的。
  3. 放入后台的命令必须可以持续运行一段时间,这样我们才能捕捉和操作它。
  4. 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则只能放入后台暂停,而不能执行。比如 vi 命令只能放入后台暂停,而不能执行,因为 vi 命令需要前台输入信息;top 命令也不能放入后台执行,而只能放入后台暂停,因为 top 命令需要和前台交互。

Linux命令放入后台运行的方法

把Linux 命令放入后台的方法有两种。

  • 第一种是在命令后面加入" 空格 & "。使用这种方法放入后台的命令,在后台处于执行状态。
  • 第二种是在命令执行过裎中按 Ctrl+Z 快捷键,命令在后台处于暂停状态。

每个被放入后台的命令都会被分配一个工作号。第一个被放入后台的命令,工作号是 1;第二个被放入后台的命令,工作号是 2,以此类推。

jobs命令:查看当前终端放入后台的工作

jobs 命令可以用来查看当前终端放入后台的工作,jobs 命令格式如下:

[root@localhost ~]#jobs [选项]

选项:

  • -l:显示工作的 PID;

jobs命令:查看当前终端放入后台的工作

 [root@localhost ~]#jobs -l
[]- Stopped top
[]+ Stopped tar -zcf etc.tar.gz /etc

可以看到,当前终端有两个后台工作:一个是 top 命令,工作号为 1,状态是暂停,标志是"-";另一个是 tar 命令,工作号为 2,状态是暂停,标志是"+"。

"+"号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作。"-"号代表倒数第二个放入后台的工作,而第三个以后的工作就没有"+-"标志了。

fg命令:把后台命令恢复在前台执行

如果想把后台工作恢复到前台执行,就需要执行 fg 命令。fg 命令格式如下:

[root@localhost ~]#fg %工作号
  • %工作号:"%"可以省略,但是注意工作号和PID的区别;

fg命令把后台命令恢复在前台执行

默认是回复最近的一个放入后台的工作

[root@localhost ~]#jobs
[]- Stopped top
[]+ Stopped tar-zcf etc.tar.gz/etc
[root@localhost ~]# fg
#恢复“+”标志的工作,也就是tar命令
[root@localhost ~]# fg %
#恢复1号工作,也就是top命令

top 命令是不能在后台执行的,所以,如果要想中止 top 命令,要么把 top 命令恢复到前台,然后正常退出;要么找到 top 命令的 PID,使用 kill 命令杀死这个进程。

bg命令:把后台暂停的工作恢复到后台执行

使用 Ctrl+Z 快捷键方式放入后台的命令,在后台都处于暂停状态,使用 bg 命令可以让这个后台工作继续在后台执行。bg 命令格式如下:

[root@localhost ~]# bg %工作号

把刚刚放入后台的两个工作恢复运行

[root@localhost ~]# bg %
[root@localhost ~]# bg %
#把两个命令恢复到后台执行
[root@localhost @]# jobs
[]+ Stopped top
[]- Running tar -zcf etc.tar.gz /etc &
#tar命令的状态变为了Running,但是top命令的状态还是Stopped

可以看到,tar 命令确实已经在后台执行了, 因为 top 命令是需要和前台交互的,所以还处于暂停状态。top 命令就是给前台用户显示系统性能的命令,所以是不能在后台恢复运行的。

nohup命令

把命令放入后台,只能在当前登录终端执行。如果是远程管理的服务器,在远程终端执行了后台命令,这时退出登录,那么这个后台命令被中止。但是我们确实需要在远程终端执行某些后台命令,该如何执行呢?有以下 3 种方法:

  1. 把需要在后台执行的命令加入 /etc/rc.local 文件,让系统在启动时执行这个后台程序。这种方法的问题是,服务器是不能随便重启的,如果有临时后台任务,就不能执行了。
  2. 使用系统定时任务,让系统在指定的时间执行某个后台命令。这样放入后台的命令与终端无关,是不依赖登录终端的。
  3. 使用 nohup 命令。

nohup 命令的作用就是让后台工作在离开操作终端时,也能够正确地在后台执行。nohup 命令格式如下:

[root@localhost ~]# nohup [命令] &

使用find命令,打印/下的所有文件。放入后台执行

[root@localhost ~]# nohup find / -print > /root/file.log &
[]

接下来退出登录,重新登录之后,这个脚本仍然可以通过“ps aux”命令看到。

Linux工作管理 jobs、fg、bg、nohup命令的更多相关文章

  1. Linux - 工作管理(job control),jobs,fg,bg,kill

    什么是工作管理? 『进行工作管理的行为中, 其实每个工作都是目前 bash 的子程序,亦即彼此之间是有相关性的. 我们无法以 job control 的方式由 tty1 的环境去管理 tty2 的 b ...

  2. nohup命令与&区别,jobs,fg,bg,Ctrl-Z、Ctrl-C、Ctrl-D

    &方式: Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台:          /usr/local/my ...

  3. [Linux内核]ctrl-z/fg/bg/nohup/setsid/()与&/disown/screen

    转自:https://my.oschina.net/alphajay/blog/65058 My Tips: Ctrl -z    ->   suspend fg           -> ...

  4. linux 后台运行进程 fg bg ctrl+z nohup

    fg.bg.jobs.&.nohup.ctrl+z.ctrl+c 命令 一.& 加在一个命令的最后,可以把这个命令放到后台执行,如 watch -n 10 sh test.sh &am ...

  5. Linux工作管理

    工作管理? 其实也就是把程序放到后台来管理,在windows中也就是最小化,在Linux中是通过命令把程序放到后台中.jobs命令查看后台程序. 对于第一点注意事项,mysql启动是例外的,要是叉掉了 ...

  6. Linux 工作管理 (job control)

    fg , bg 有时,命令需要很长的时间才能执行完成.对于这种情况,我们使用‘bg’命令可以将任务放在后台执行,而用‘fg’可以调到前台来使用. 我们可以通过‘&’在后台启动一个程序: fin ...

  7. Linux命令-工作管理命令:&,ctrl+z,jobs,fg,bg

    在linux下面将一个进程放入后台执行,有两种方式: 第一种方式:&表示命令在后台执行程序,等同于windows里面的程序最小化. 第二种方式:执行某一个命令,例如:top,然后按ctrl+z ...

  8. Linux下&/jobs/fg/bg命令的使用(转)

    一.& 这个用在一个命令的最后,可以把这个命令放到后台执行. 二.[Ctrl]+[Z] 可以将一个正在前台执行的命令放到后台,并且暂停. 三.jobs 查看当前有多少在后台运行的命令. 四.f ...

  9. fg bg 等命令

    fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令 ...

随机推荐

  1. Linux USB 鼠标输入驱动具体解释

    平台:mini2440 内核:linux 2.6.32.2 USB设备插入时.内核会读取设备信息,接着就把id_table里的信息与读取到的信息做比較.看是否匹配,假设匹配.就调用probe函数. U ...

  2. WPF之数据绑定

    WPF学习之数据绑定 1. Banding基础 WPF中的数据绑定提供了很强大的功能.与普通的WinForm程序相比,其绑定功能为我们提供了很多便利,例如Binding对象的自动通知/刷新,Conve ...

  3. Duilib教程-简单介绍

    在读这篇博客的时候,可能您已经对duilib有一定的了解.所以,我并不打算对duilib进行过多的介绍.它的内核首先由外国人编写,后来由国人一个小组接过来继续编写,于是就有了现在的Duilib. 1. ...

  4. java动态编译 (java在线执行代码后端实现原理)

    需求:要实现一个web网页中输入java代码,然后能知道编译结果以及执行结果 类似于菜鸟java在线工具的效果:https://c.runoob.com/compile/10 刚开始从什么概念都没有到 ...

  5. Kotlin——高级篇(四):集合(Array、List、Set、Map)基础

    在实际的项目开发中,集合的运用可以说是多不胜数.不过Kotlin中的集合运用和Java中还是有很大的差别,他们两者之间,除了集合的类型相同以外,还包含集合的初始化的不同,以及Kotlin对于集合封装特 ...

  6. JS制作一个通用的商城版历史浏览记录

    正在开发一个b2c的国外商城,昨天做了一个历史浏览记录发出来跟大家分享一下. JS: //cookie相关函数 function getCookieVal(offset) {    var endst ...

  7. [LintCode] 用栈实现队列

    class Queue { public: stack<int> stack1; stack<int> stack2; Queue() { // do intializatio ...

  8. 浅谈数据库并发控制 - 锁和 MVCC

    在学习几年编程之后,你会发现所有的问题都没有简单.快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制. 如果数据库中的所有事务都是 ...

  9. mysql 数据库表名大小写问题

    lower_case_table_names=1 原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /usr/my.cnf: ...

  10. epoll浅析以及nio中的Selector

    出处: https://my.oschina.net/hosee/blog/730598 首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference) ...