作业管理:jobs
工作管理
像前面学到的vi
、top
等命令,都是占用了整个shell,只能等结束操作vi
或者top
才能进行其他操作。又或者说,一个压缩或者一个解压缩消耗了太长的时间。导致要等它完成才能进行其他操作。又或者后面学到通过源码编译的方法编译安装软件,特别是编译gcc,等几个小时。那么现在就来学习一下,怎样可以在一个shell上面进行多作业管理。
由于假设我们只有一个终端接口,因此在可以出现提示字符让你操作的环境就称为前台(foreground),至于其他工作就可以让你放入后台 (background) 去暂停或运行。要注意的是,放到后台的工作想要运行时, 他必须不能够与使用者互动。举例来说, vim 绝对不可能在背景里面执行 (running)的!因为你没有输入数据他就不会跑啊! 而且放入背景的工作是不可以使用 CTRL + c
来终止的!
总结一下,使用bash
来进行工作管理,有以下几个注意事项:
- 这些工作所触发的程序必须来自于当前自己的 shell 的子程序
- 可以控制与下达指令的这个环境称为前台工作
- 可以自行运行的工作,你无法使用
CTRL + c
终止他,可使用 bg/fg 调用该工作 - 在后台中“执行”的程序不能等待 terminal/shell 的输入
后台运行的两种方法
第一种
第一种将工作放到后台执行的方法,是在命令的最后面加上 &
。这样按下回车键之后,工作就会进入到后台运行。像top
、vi
这种不能放到后台运行,没有数据输入,没办法运行呀。
实例
# 后台压缩文件
$ tar -cJf big_data.tar.xz /home
[1] 3038
第二种
第二种将工作放到后台执行的方法,当前台还没执行完的工作,堵塞了shell,无法进行其他操作。这个时候可以输入CTRL + Z
,作业就是转到后台执行。但使用这种方法转到后台执行的工作状态会由“正在执行”变成“已停止”。
实例
$ top
CTRL + Z
[1]+ 已停止
查看工作状态:jobs
jobs
命令可以查看前台处于后台的工作有多少,以及其对应的工作状态。
基本语法
jobs [参数]
参数说明
参数 | 说明 |
---|---|
-l | 列出进程的pid |
-r | 只显示正在运行的工作 |
-s | 只显示已停止的工作 |
实例
# 显示所有正在后台运行的工作,以及其pid
$ jobs -l
[1] 3061 Stopped ./a.sh
[2] 3065 Stopped ./a.sh
[3]- 3066 Stopped ./a.sh
[4]+ 3067 Stopped ./a.sh
细心的同学会发现,列表中,有些作业是有+
,有些作业带了-
。
+
号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作。-
号代表倒数第二个放入后台的工作,而第三个以后的工作就没有+-
标志了。
将后台的工作转到前台运行:fg
fg
命令用于把后台工作恢复到前台执行。
基本语法
fg %工作id
其中,%
可以省略,如果连工作id也省略,那么jobs
命令会恢复作业id后面有+
号的工作。
实例
# 将工作id是2的工作转到前台执行
fg 2
将后台停止工作的工作恢复执行:bg
前面介绍过,正在前台执行的工作,通过快捷键CTRL + Z
转到后台运行的时候,工作转到后台的同时,工作状态也会转为停止,那么就可以通过bg
命令,将工作在后台恢复执行。
基本语法
bg %工作id
bg
的用法跟fg
的用法很像。这里的%
同样是可以省略的。
实例
# 将工作id是4的工作恢复在后台执行
$ bg 4
[1]+ ./a.sh &
杀掉后台工作:kill
不管后台的工作处于什么状态,都可以通过kill
命令将后台的工作杀掉。
要特别注意,使用kill
命令结束后台工作的时候,工作id前面的%
不能省略哦,不然工作id就会被当作进程ID处理了。
基本语法
kill -signal %工作id
参数说明
signal | 说明 |
---|---|
-1 | 重新读取一次参数的配置文件 (类似 reload) |
-9 | 立刻强制删除一个工作 |
-15 | 以正常的程序方式终止一项工作 |
实例
# 杀掉工作id是2的工作
kill -9 %2
脱离终端运行:nohup
前面演示的,将工作放到后台运行,都是在bash
的后台,如果用户退出登陆bash
也跟着结束了,那么后台的工作也会全都没有了。nohub
命令会有自己的日志文件nohup.out
,命令执行的日志都放在这个日志文件里面。
基本语法
nohup [指令与参数] &
注意,这里的&
表示此命令会在终端后台工作;反之,如果没有&
,则表示此命令会在终端前台工作。
实例
# 将自己写的脚本,放到后台运行
$ nohup ./a.sh &
nohup: 忽略输入并把输出追加到'nohup.out'
混迹IT行业多年,技术依然渣渣,故名zaza-h
记录和分享自己的学习历程,如果有错漏,请各路大神帮忙指正。也欢迎大家多多讨论,共同成长
本文来自博客园,作者:zaza_h,转载请注明原文链接:https://www.cnblogs.com/zaza-h/p/16217252.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!