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 当只有一个终端时,可以出现提示符让你 ...
随机推荐
- [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 ...
- mysql查询之上升的温度,有趣的电影,超过5名学生的课,大国,反转性别, 换座位
最近发现一个网站 力扣 查看 上面有很多算法和数据库的题目,做了一下,发现自己平时都疏忽了,因此边做边记录下来 1.上升的温度 给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天 ...
- jinkins 部署过程
jinkins 概述 jinkins 本身是一个 webapp 项目,部署在了tomcat 环境下,就变成了一个网站.他有一个功能,就是构建,构建的时候做了什么事情? gitlab 获取代码 mave ...
- Spring中的乱码问题
最近发现一个问题, 中文编码保存到数据库里显示正确, 打印出来却是一串问号, 然后怀疑是平台默认编码的问题, locale命令显示是UTF-8正常, 然后单独编写一个java文件, 编译然后Java命 ...
- 12 Spring JdbcTemplate的使用
1.项目搭建 <1>数据库表account对应的账户实体类 package domain; import java.io.Serializable; /** * 账户实体类 */ publ ...
- 02 Struts2框架----学习笔记2(了解一下,已过时)
1.*号通配符优化struts.xml代码 创建一个UserAction的动作类 package action; import com.opensymphony.xwork2.ActionSuppor ...
- liunx mysql数据库目录迁移
1.查看mysql安装目录 从目录etc/my.cnf中查看安装目录 2.进入mysql目录,停止mysql服务 命令: cd usr/local/mysql 命令:service mysql sto ...
- 18年10月 python 中出现 ValueError: need more than 1 value to unpack 解决办法 (笨办法)
eg:a,b = argv :错误,我的理解也许不正确,但是能解决办法 a,b= argv,argv 正确 :经测试不会出现错误. ------------------------------ ...
- docker(一): 安装
开始 docker是一个可以帮助开发者使用容器(containers)开发.部署和运行应用程序的平台.llinux下使用容器部署系统称为containerization. container 是映像( ...
- zap+日志分级分文件+按时间切割日志整合demo
实现功能 info debug 级别的日志输出到 /path/log/demo.log warn error .... 级别的日志输出到 /path/log/demo_error.lo ...