注:1.这里说的Bash不单纯的指Bash,泛指shell

2.这里的后台指的是Bash下面避免任务(Jobs)被Ctrl+C中断的一种场景,与我们说的deamon那种后台工作的进程不是一个概念,注意区分。

简介

Bash工作管理是指在Bash界面下同时进行多个工作任务的管理。举例来说:登陆 bash 后, 你可以一边复制文件、一边进行数据搜寻、一边编译程序、一边编写程序等等,这些任务都是Bash的子进程。Bash工作管理只能管理自己Bash下面的工作,不能把别人Bash下面的工作拿到自己Bash下执行,即使你是root也不行。但是root可以在这个Bash下干死在另一个Bash下的进程(参考:Is it possible to kill another user's process using sudo privileges?)。同理,你也不能由tty1的Bash去管理tty2的Bash。

前台和后台

后台工作的任务不可以等待terminal的输入,即不能与用户交互。同时后台的jobs也没法Ctrl+C暂停。使用jobs可以查看后台有哪些任务,以及他们当前的状态(Stopped、Running)。把后台任务拿到前台继续运行,使用fg命令;后台Stopped状态的任务继续运行,使用bg命令;对于删除后台任务,或重启后台任务等更复杂的操作,则借助Linux信号机制实现。下面对关键命令做解释。

把任务直接丢到后台运行

后台运行最大的好处就是可以不被Ctrl+C终端,但是对于后台任务的stdout和stderr还是会输出到前台影响前台显示。举例:yum -y install qemu-kvm &

虽然我把安装命令放到后台执行,但是安装过程输出还是会显示在屏幕上。通常的做法是把stdout和stderr重定向到日志文件,后台任务执行过程中输出信息在日志文件中查看。演示如下

tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt >& &

在任务最后加&表示本次任务直接丢到后台,执行的时候前台会显示当前任务编号以及任务PID

这个任务的意思是:解压etc.tar.gz到指定目录,stdout和stderr都从定向到log.txt

暂停任务

想象这样一种场景,我正在vi passwd文件,突然先看看主机名是什么,于是我暂停vi操作。去编辑hostname问价,vi hostname后,我有暂停出去vi resolv.conf,还没编辑完,我又暂停。此时我总共暂停了3个任务。使用jobs可以查看后台任务。

jobs

选项与参数:

-l :除了列出 job number 与命令串之外,同时列出 PID 的号码;

-r :仅列出正在背景 run 的工作;
-s :仅列出正在背景当中暂停 (stop) 的工作。

[root@localhost etc]# jobs
[] Stopped vi /etc/passwd (wd: ~)
[]- Stopped vi hostname
[]+ Stopped vi /etc/resolv.conf

很显然,我这3个任务都是Stopped状态。

后台工作拿到前台处理

上面有3个Stopped的任务,使用fg可以将后台暂停任务拿到前台继续运行。

fg

选项与参数:

%jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!

+:运行前面有+号的那个任务

-:运行前面有-号的那个任务

 后台暂停任务继续运行

如果后台暂停任务不拿到前台运行,在后台也是可以继续运行的,使用bg命令

bg

选项与参数:

%jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!

更复杂的操作

对于后台任务,如果想执行删除或者重启操作,就要借助Linux信号机制。使用kill个后台任务发信号

signal

kill -signal %jobnumber

选项与参数:

-l :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?
-1 :重新读取一次参数的配置档 (类似 reload);
-2 :代表与由键盘输入 [ctrl]-c 同样的动作;
-9 :立刻强制删除一个工作;
-15:以正常的程序方式终止一项工作。与 -9 是不一样的。

任务脱机管理

如果你是以远程连线方式连接到你的 Linux 主机,并且将任务以 & 的方式放到后台执行, 请问,在任务尚未结束的情况下你离线了,该工作还会继续进行吗?答案是『否』!不会继续进行,而是会被中断掉。

如果有个任务要执行一个月,你难道不吃不喝等他一个月吗?当然不是

Linux下例行工作命令at可以解决这个问题,nohup命令也可以解决这个问题

语法如下

nohup [命令与参数] <==在终端机前景中工作
nohup [命令与参数] & <==在终端机背景中工作

Bash基础——工作管理(Job control)的更多相关文章

  1. 第十七章、程序管理与 SELinux 初探 工作管理 (job control)

    工作管理 (job control) 这个工作管理 (job control) 是用在 bash 环境下的,也就是说:『当我们登陆系统取得 bash shell 之后,在单一终端机介面下同时进行多个工 ...

  2. 工作管理 (job control)

    这个工作管理 (job control) 是用在 bash 环境下的,也就是说:『当我们登入系统取得创建的 bash shell 进程之后,在该bush下同时进行多个工作的行为管理 』. 而所有创建的 ...

  3. Linux学习-工作管理 (job control)

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

  4. Linux 工作管理 (job control)

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

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

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

  6. Linux中的工作管理(Job Control )

    以前使用Linux老是会不小心按下Ctrl + z,然后就出现看不懂的情况,以为程序突然就没了,今天专门研究了下Linux下的几个快捷键和工作管理. 其中找到一篇很不错的文章,大部分是里面转载的. 原 ...

  7. git的工作管理和基础操作

    git的工作管理和基础操作 在本地创建git仓库管理我们的代码 初次使用git,先在本地配置一些基础信息 $ git config -l $ git config --global user.name ...

  8. cmd 与 bash 基础命令入门

    身为一个程序员会用命令行来进行一些简单的操作,不是显得很装逼嘛!?嘿嘿~ ヾ(>∀<) cmd 与 bash 基础命令入门       简介       CMD 基础命令          ...

  9. 【Linux】工作管理

    在进行工作管理的行为中,其实每个工作都是目前bash的子进程,即彼此间是有相关性的.我们无法以job control的方式由tty1的环境去管理tty2的bash 当只有一个终端时,可以出现提示符让你 ...

随机推荐

  1. [LeetCode] 111. Minimum Depth of Binary Tree 二叉树的最小深度

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  2. mysql查询之上升的温度,有趣的电影,超过5名学生的课,大国,反转性别, 换座位

    最近发现一个网站 力扣 查看 上面有很多算法和数据库的题目,做了一下,发现自己平时都疏忽了,因此边做边记录下来 1.上升的温度 给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天 ...

  3. jinkins 部署过程

    jinkins 概述 jinkins 本身是一个 webapp 项目,部署在了tomcat 环境下,就变成了一个网站.他有一个功能,就是构建,构建的时候做了什么事情? gitlab 获取代码 mave ...

  4. Spring中的乱码问题

    最近发现一个问题, 中文编码保存到数据库里显示正确, 打印出来却是一串问号, 然后怀疑是平台默认编码的问题, locale命令显示是UTF-8正常, 然后单独编写一个java文件, 编译然后Java命 ...

  5. 12 Spring JdbcTemplate的使用

    1.项目搭建 <1>数据库表account对应的账户实体类 package domain; import java.io.Serializable; /** * 账户实体类 */ publ ...

  6. 02 Struts2框架----学习笔记2(了解一下,已过时)

    1.*号通配符优化struts.xml代码 创建一个UserAction的动作类 package action; import com.opensymphony.xwork2.ActionSuppor ...

  7. liunx mysql数据库目录迁移

    1.查看mysql安装目录 从目录etc/my.cnf中查看安装目录 2.进入mysql目录,停止mysql服务 命令: cd usr/local/mysql 命令:service mysql sto ...

  8. 18年10月 python 中出现 ValueError: need more than 1 value to unpack 解决办法 (笨办法)

    eg:a,b = argv    :错误,我的理解也许不正确,但是能解决办法 a,b=  argv,argv 正确 :经测试不会出现错误. ------------------------------ ...

  9. docker(一): 安装

    开始 docker是一个可以帮助开发者使用容器(containers)开发.部署和运行应用程序的平台.llinux下使用容器部署系统称为containerization. container 是映像( ...

  10. zap+日志分级分文件+按时间切割日志整合demo

    实现功能     info debug 级别的日志输出到 /path/log/demo.log     warn error .... 级别的日志输出到 /path/log/demo_error.lo ...