工作管理概述
工作管理指的是在单个登录终端中(也就是登录的shell界面中) 同时管理多个工作的行为。windows将工作放入后台是最小化即可,linux则需要使用相关命令操作。
通过工作管理我们可以将一些需要持续运行的命令或者说服务以及一些可能阻塞当前终端操作的命令放在后台运行或者暂停,然后也可以对后台运行的工作进行查看,对暂停的工作进行恢复。
注意事项
- 当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作。当然有些服务除外,比如mysql服务自己做了优化可以脱离终端,即使关闭当前终端,也不会停止服务
- 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作
- 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行
相关说明
- 比如像
ls
、cat
命令这种瞬时运行的命令是不允许放入后台的命令 - 一般诸如打包,复制大文件,压缩与解压缩,搜索命令
find
都可以放入后台执行 - 像
top
命令是为了展示结果给前端用户的,而vim
命令是需要前台输入的,诸如这些命令运行在后台
是没有任何意义的。即使通过命令将它们运行在后台,也是stop状态。
工作管理方法
把进程放入后台
通过 &
符号 或者 ctrl + z
,以tar命令为例:
tar -zcf redis1.tar.gz &
#把命令放入后台,并在后台执行
tar -zcf redis2.tar.gz
#按下ctr+z快捷键,放在后台暂停
查看后台的工作
jobs [-l]
# -l代表显示工作的PID
"+"
号代表最后一个放入后台的工作,也是工作恢复时,默认恢复的工作
"-"
号代表倒数第二个放入后台的工作,第三个工作就不会有符号显示
[1]
这里的1代表工作号
将后台暂停的工作恢复到前台执行
fg %工作号
注: %号可以省略,但是注意工作号和PID的区别,不带参数默认恢复"+"号的工作
将后台暂停的工作恢复到前台执行
bg %工作号
后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行,不带参数默认恢复"+"号的工作
后台命令脱离终端运行
把命令放入后台,只能在当前登录终端执行。一旦退出或关闭终端,后台程序就会停止。原因是一旦关闭终端,系统会默认发出一个SIGHUP信号,把正在运行的后台程序给终止掉。其实可以通过将程序做成守护进程来避免终端的影响,但是操作和管理过于复杂
脱离终端常用方法
- 把需要后台执行的命令加入
/etc/rc.local
文件(推荐) - 使用系统定时任务,让系统在指定的时间执行某个后台命令
- 标准方法是使用nohup命令(推荐):
nohup [命令] &
举个例子
vim for.sh
# 文件内容如下
#!/bin/bash
for((i=0;i<=1000;i=i+1)){
do
echo 11 >> /root/for.log
sleep 10s
done
}
# 保存退出
nohup /root/for.sh &
# 关闭当前终端,重新打开一个终端,查看该进程依然存在:ps -aux