事实上,在终端中如果对命令不加处理,那么命令会在前台运行。
然而有时候需要将编译、压缩等耗时的工作放到后台运行,这个时候只需要在命令末尾加上&
即可。
$ tar -zcvf etc.tar.gz /etc > log.txt 2>&1 &
[1] 27914
Shell将命令放在后台运行,并返回了作业号1
和进程号27914
。
需要注意的是,如果程序在后台运行,那么它将无法接受用户的输入,但是其输出将显示在屏幕上(可能用户正在进行其他工作,突然冒出了错误输出),因此在后台执行的程序需是不需要人工干预的、输出被妥善处理(比如重定向)的程序。
有的时候在程序开始运行之后,想要将程序放在后台执行,这时需要按^Z
快捷键暂停程序,然后使用bg %作业号
命令将其放入后台执行:
$ sleep 10
^Z
[1]+ Stopped sleep 10
$ jobs
[1]+ Stopped sleep 10
$ bg %1
[1]+ sleep 10 &
$ jobs
[1]+ Running sleep 10 &
可见,在按^Z
后,程序进入暂停状态(Stopped),在将其放入后台后,程序继续执行(Running)。上面例子中jobs
命令列出后台的程序。
当然,也可以使用fg %作业号
将程序从后台移到前台:
$ jobs
[1]+ Running sleep 10 &
$ fg %1
sleep 10
$
最后,可以使用kill
程序杀死背景中的程序:
$ kill -9 %1 # 强制结束工作号为1的程序
$ kill -15 %1 # 正常结束工作号为1的程序
网友评论