在Linux上执行命令有的时候需要放到后台运行,此文主要讲放入后台和查看后台任务的方法
一、放入后台命令
1. 命令 空格 &
直接将命令放入后台的方式。使用这种方法放入后台的命令,在后台处于执行状态。每个任务会分配一个进程号PID。运行完成后终端会显示如下信息:
[1]+ Done find / -name *.fa -type f
证明后台这个命令运行完成。其中[1] 是这个命令的工作号,“+” 代表这个命令是最后一个被放入后台的。若是多个任务在后台进行,此任务运行完毕,倒数第二个任务则变成+号。
这种方式放入后台的命令不能与前台有交互,否则这个命令是不能在后台执行的。
比如scp命令,需要交互用户密码,这种方式是没有办法运行的。
2. 先前端运行,然后调入后台运行
##将任务暂停
ctrl +z
##任务显示为
[1] + Stopped scp ....
##scp 命令被放入后台,分配的工作号为1,状态是暂停(挂起)。若有多个放入后台的任务,工作号会逐渐递增。
##放入后台的命令继续执行,默认是执行最后一个放入后台的任务
bg
##若启动固定的后台任务,可使用
bg %[任务ID] #比如bg %1;
二、查看后台任务
1. 使用jobs
命令可以列出目前在后台的任务
Jobs的状态可以是Runing(R),Stopped(S),Terminated(T)。可以是kill %[id]
的方式终止某个进程任务。
经常掉的坑:经常会发现更换终端,或者重新开一个新终端后,使用
jobs
命令没有查到任何后台作业。
这是因为jobs
命令仅可以用来查看当前终端放入后台的任务。是获取本次bash进程下子进程的后台作业。当本次终端退出后,后台作业变成孤儿进程,孤儿进程有系统父进程接管。当再次链接终端时,原作业任务与当前终端,不存在父子关系,故看不到进程。但是原作业,会在系统中一直运行,直到完成或终止。(参考:# jobs命令查看不到任务的原因)
2. 使用ps
命令可以列出目前在后台的任务
ps -aux |grep XXX
查看系统所有任务
此命令是将前后台的任务都罗列出来。
+-号的问题:
对于放在后台的任务,若有多个任务,最后一个放入的任务是显示
+
,即当前默认的工作任务。-
是指倒数第二个放入后台的工作,倒数第三个及以后的任务就没有“+-”符号了。一旦当前的默认工作处理完成,则带减号的工作就会自动成为新的默认工作。也就是,不管此时有多少正在运行的工作,任何时间都会有且仅有一个带加号的工作和一个带减号的工作。