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 |