[Linux]Job管理


当我们在Linux Bash下执行命令(如tar),默认都是在前台进行的,即我们必须得等到命令结束之后才能执行后续的命令。事实上,我们是可以控制命令在后台执行,这就是Linux的Job管理。

& - 把命令丢到后台执行

在执行命令的最后加上&,就表示把该命令丢到后台执行,如下所示:

# tar -zcvf source.tar.gz ./source > /tmp/source_tar.log 2>&1 &
[1] 10015
注意1:虽然我们把job放到后台了,到它的标准输出和标准错误输出还是依然会干扰到前台,所以一般情况行,对于后台的job,都采用输出重定向,把输出信息写到文件里,已免干扰到前台的工作。

注意2:当把命令丢到后台后,屏幕将显示一行信息(如上所示的第2行),第1列代表job number,第2列代表PID。

[ctrl]-z - 将目前工作丢到后台,并暂停

假设我正在执行一条压缩命令,这条命令需要很长时间,如下所示:
[root@lx15 /opt ]# tar -zcvf oracle.tar.gz ./oracle > /tmp/oracle_tar.log 2>&1 
这时如果我按下[ctrl] - z,将会把该工作丢到后台去,并暂停,如下所示:
[1]+  Stopped                 tar -zcvf oracle.tar.gz ./oracle > /tmp/oracle_tar.log 2>&1

jobs - 查看当前后台工作状态

jobs [-lrs]
-l:列出job的详细信息
-r:仅列出状态为run的job
-s:仅列出状态为stop的job
[root@lx15 /opt ]# jobs -l
[1]+ 10647 Stopped                 tar -zcvf oracle.tar.gz ./oracle > /tmp/oracle_tar.log 2>&1

fg - 将后台工作放到前台

fg %jobnumber
# fg %1
tar -zcvf oracle.tar.gz ./oracle > /tmp/oracle_tar.log 2>&1

bg - 改变后台工作为running

[root@lx15 /opt ]# jobs
[1]+  Stopped                 tar -zcvf oracle.tar.gz ./oracle > /tmp/oracle_tar.log 2>&1
[root@lx15 /opt ]# bg %1
[1]+ tar -zcvf oracle.tar.gz ./oracle > /tmp/oracle_tar.log 2>&1 &
[root@lx15 /opt ]# jobs
[1]+  Running                 tar -zcvf oracle.tar.gz ./oracle > /tmp/oracle_tar.log 2>&1 &

nohup - 脱机运行

从上面我们可以知道,在命令的后面加上&可以让它在后台运行,但一旦你退出或注销了终端(exit),该命令将终止。如果你想要你的命令在退出或注销后还能运行,则必须得在命令的前面加上nohup才行。
nohup [命令] -- 脱机前台运行
nohup [命令] & -- 脱机后台运行

相关内容