Bash基础——工作管理(Job control)
注: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)的更多相关文章
- 第十七章、程序管理与 SELinux 初探 工作管理 (job control)
工作管理 (job control) 这个工作管理 (job control) 是用在 bash 环境下的,也就是说:『当我们登陆系统取得 bash shell 之后,在单一终端机介面下同时进行多个工 ...
- 工作管理 (job control)
这个工作管理 (job control) 是用在 bash 环境下的,也就是说:『当我们登入系统取得创建的 bash shell 进程之后,在该bush下同时进行多个工作的行为管理 』. 而所有创建的 ...
- Linux学习-工作管理 (job control)
什么是工作管理? 进行工作管理的行为中, 其实每个工作都是目前 bash 的 子进程,亦即彼此之间是有相关性的. 我们无法以 job control 的方式由 tty1 的环境去管理 tty2 的 b ...
- Linux 工作管理 (job control)
fg , bg 有时,命令需要很长的时间才能执行完成.对于这种情况,我们使用‘bg’命令可以将任务放在后台执行,而用‘fg’可以调到前台来使用. 我们可以通过‘&’在后台启动一个程序: fin ...
- Linux - 工作管理(job control),jobs,fg,bg,kill
什么是工作管理? 『进行工作管理的行为中, 其实每个工作都是目前 bash 的子程序,亦即彼此之间是有相关性的. 我们无法以 job control 的方式由 tty1 的环境去管理 tty2 的 b ...
- Linux中的工作管理(Job Control )
以前使用Linux老是会不小心按下Ctrl + z,然后就出现看不懂的情况,以为程序突然就没了,今天专门研究了下Linux下的几个快捷键和工作管理. 其中找到一篇很不错的文章,大部分是里面转载的. 原 ...
- git的工作管理和基础操作
git的工作管理和基础操作 在本地创建git仓库管理我们的代码 初次使用git,先在本地配置一些基础信息 $ git config -l $ git config --global user.name ...
- cmd 与 bash 基础命令入门
身为一个程序员会用命令行来进行一些简单的操作,不是显得很装逼嘛!?嘿嘿~ ヾ(>∀<) cmd 与 bash 基础命令入门 简介 CMD 基础命令 ...
- 【Linux】工作管理
在进行工作管理的行为中,其实每个工作都是目前bash的子进程,即彼此间是有相关性的.我们无法以job control的方式由tty1的环境去管理tty2的bash 当只有一个终端时,可以出现提示符让你 ...
随机推荐
- Oracle 性能分析
1.--查出耗时长的 10条SQL select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time, v.cpu_ ...
- [译]为什么在__new __()后总是调用__init __()?
原文来源: https://stackoverflow.com/questions/674304/why-is-init-always-called-after-new 需要控制新实例的创建时,请使用 ...
- 非LODOP的打印其他问题-简短问答
该文是一些应用软件,或打印机,即使不使用lodop,也可能会常见的问题.一般和操作系统,电脑硬件打印机硬件等有关. 1.错误-正在打印 怎么解决这个是打印机队列的状态,排查下电脑和打印机的连线是否正常 ...
- Jenkins - 以Docker方式安装启动Jenkins
1 - 官网信息 操作步骤:https://jenkins.io/zh/doc/book/installing/#docker Docker映像地址:https://hub.docker.com/r/ ...
- Mac OS备份迁移iBooks图书操作方法
前段时间换电脑,需要把原本电脑上的一些文件备份.迁移出来,包括iBooks中的电子书. 理论上,苹果体系中通过icloud账号可以把通讯录.备忘录等东西同步过去,但查了一下发现图书支持有限,而且我的e ...
- ENSP静态链路聚合实验配置要点及实例
链路聚合分为:静态链路聚合.动态链路聚合链路聚合的负载分担模式:对于二层数据流,系统会根据MAC地址(源mac地址和目的mac地址来计算),而对于三层数据流则会根据ip地址来进行负载分担计算. 静态链 ...
- [转帖]helm模板文件chart编写语法详解
helm模板文件chart编写语法详解 https://blog.51cto.com/qujunorz/2421328 需要学习一下. charts编写介绍 开始 快速创建一个chart模板,helm ...
- C++ 读写 Excel 文件
//Microsoft Visual Studio 2015 Enterprise #include <fstream> #include <string> #include ...
- 2. 执行Spark SQL查询
2.1 命令行查询流程 打开Spark shell 例子:查询大于21岁的用户 创建如下JSON文件,注意JSON的格式: {"name":"Michael"} ...
- Codeforces 1239B. The World Is Just a Programming Task (Hard Version)
传送门 这一题好妙啊 首先把括号序列转化成平面直角坐标系 $xOy$ 上的折线,初始时折线从坐标系原点 $(0,0)$ 出发 如果第 $i$ 个位置是 '(' 那么折线就往上走一步($y+1$),否则 ...