Linux 和 Unix 属于多任务的操作系统,也就是说一个系统在同一时间段内能运行多重任务(进程)。

作业控制不只是能够停止/挂起(stop/suspend)正在执行的进程(命令),也可以继续/唤醒(continue/resume)执行你需要的每一个进程。

Bash ,或者是 POSIX shell 提供给了作业控制的环境。

你的 shell 会留有一张当前作业的表单,称为作业表。当你键入命令时,shell 会给它分配一个 jobID(也称作 JOBSPEC)。一个 jobID 或 JOBSPEC只是很小的整数数值。

job 的 state 显示以下值之一(在 POSIX 的语言环境下):
   Running
  表示此作业没有被信号挂起并没有退出。
 Done
  表示此作业已经完成并返回退出状态 0。
   Done (code)
  表示此作业已经正常完成和退出并返回指定的非零退出状态码。这个代码用一个十进制数来表示。
   Stopped
  表示此作业已经挂起。
 Stopped (SIGTSTP)
  表示 SIGTSTP 信号挂起作业。
 Stopped (SIGSTOP)
  表示 SIGSTOP 信号挂起作业。
 Stopped (SIGTTIN)
  表示 SIGTTIN 信号挂起作业。
 Stopped (SIGTTOU)
  表示 SIGTTOU 信号挂起作业。

Linux 和 Unix 作业控制命令总结列表

命令 描述 示例
& 将作业置入后台 命令 &
%n 设置作业号为 n (数字)的作业 命令 %1
%Word 引用命令行开端包含 Word 的作业 命令 %ping
%?Word 引用命令行包含 Word 的作业 命令 %?ping
%%
%+
引用当前作业 kill %%
kill %+
%- 引用先前作业 bg %-
CTRL-Z
kill -s stop jobID
挂起或停止作业 kill -s stop %ping
jobs
jobs -l
列出活动的作业 jobs -l
bg

将作业置入后台

(可以将stop的job状态改为running)

bg %1
bg %ping
fg 将作业置入前台 fg %2
fg %apt-get