Linux命令——任务控制

时间:2021-08-08 17:39:40

jobs 列出所有后台任务
& 将任务放到后台执行
Ctrl^Z 暂停当前(前台)任务
suspend 暂停shell
fg 恢复任务(将任务带到前台)
bg 将暂停的任务放到后台继续执行
任务控制(job control)是任何Linux shell都必备的能力,也就是在后台(多任务)与前台(实时现场)运行程序的能力。任务job是shell的工作单位,当你以交互方式下达一个命令,shell就将该命令视为一项任务。当命令结束时,相关的任务也就跟着完成消失了。别将Linux内核的工作单位——进程(process),与shell的任务(job)混为一谈,“任务”是比“进程”更高级的概念:一个任务可能涉及好几个进程,但是一个进程几乎不可能完成一个任务。事实上,Linux内核对“任务”的概念一无所知,真正控制任务的是shell,关于任务控制的几个重要术语,分述如下:
前台任务(foreground job):直接由shell在现场执行的任务,在任务完成之前,提示符不会出现。一个shell每次只能有一个前台任务。
后台任务(background job):由shell于暗地执行的任务,shell不等待后台任务结束,变回立刻再输出提示符,让用户可以继续使用同一个shell。
挂起(suspend):暂时停止前台任务的执行。
恢复(resume):让挂起的任务继续执行

jobs 命令
shell的内置命令,用于勒出当前shell所有未完成的任务:
jobs  
……  
……  
左侧方的数字是任务编号,反括号右侧的 + 符号表示该任务是fg与bg命令会默认影响的任务。  
& 命令  
在命令行末端加注一个 & 符号,表示要求shell将该命令放到后台去运行。
emacs myfile &
…………
shell会输出一个任务编号以及该命令的进程编号(PID),然后立刻输出提示符,不管后台任务是否执行完毕。
Ctrl + Z 命令
当前台任务仍在执行中,提示符还没有输出之前,在shell中按下 Ctrl + Z ,可立即挂起任务。被挂起的任务会暂停运行,其状态会被记录下来,但是不会结束。
$mybigpram
^Z
…………
对于已挂起的任务,可以使用bg将他放到后台继续执行,或是以fg使其恢复到前台执行。

bg [%jobnumber]
shell的内置命令,其作用是将挂起的任务放到后台继续执行。
若没有指定参数,bg作用在最近一次挂起的任务上,若要影响前几次所挂起的特定任务,可以先用jobs命令查出该任务的编号,然后以下列语法来将任务放到后台:
$bg %2
某些类型的交互任务不能留在后台。例如,正在等待你输入数据的任务就不适合放在后台,如果你尝试这样做,shell将挂起该任务,然后告诉你:
[2]+ Stopped command line here
这时候可用fg将该任务拉到前台,使其继续运行。

fg [%jobnumber]
shell内置命令,期作用是将挂起的任务或者后台人去拉到前台,使其继续执行。
若没有指定参数,fg作用在最近一次被挂起或者放到后台的任务上,若要影响前几次所挂起的特定任务,可以先用jobs命令查出该任务的编号,然后以下列语法来将任务放到前台:
$bg %2