手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

jobs(1)

名称

jobs , fg , bg , stop , notify - 控制进程执行

用法概要

sh

jobs [-p | -l] [% job_id...]
jobs -x command [arguments]
fg [% job_id...]
bg [% job_id...]
stop % job_id...
stop pid...

csh

jobs [-l]
fg [% job_id]
bg [% job_id]...
notify [% job_id]...
stop % job_id...
stop pid...

ksh88

jobs [-lnp] [% job_id...]
fg [% job_id...]
bg [% job_id...]
stop % job_id...
stop pid...

ksh

jobs [-lnp] [job_id...]
fg [job_id...]
bg [job_id...]

描述

sh

当启用了作业控制时,Bourne shell 内置的 jobs 会报告所有已停止或正在后台执行的作业。如果省略了 %job_id,则会报告所有已停止或正在后台运行的作业。以下选项可修改或增强 jobs 的输出内容:

–l

报告作业的进程组 ID 和工作目录。

–p

只报告作业的进程组 ID。

–x

使用相应的进程组 ID 替换在 commandarguments 中找到的任何 job_id,然后将 arguments 传递给 command 并执行该命令。

作为 jsh 调用 shell 时,除了之前所述的适用于 sh 的所有功能外,还会启用作业控制。通常情况下,作业控制仅针对交互式 shell 启用。非交互式 shell 通常无法受益于作业控制提供的附加功能。

当启用了作业控制时,用户在终端输入的每个命令或管道都称为一个 job_id。所有作业都以下列状态之一存在:前台、后台或已停止。这些术语的定义如下所述:

  1. 位于前台的作业对控制终端具有读写访问权限。

  2. 位于后台的作业对控制终端的读取访问会被拒绝,但它对控制终端具备有条件的写入访问权限(请参见 stty(1))。

  3. 已停止的作业是指通常受 SIGTSTP 信号影响,已经置于挂起状态的作业(请参见 signal.h(3HEAD))。

shell 启动的每个作业都分配有一个正整数(称为 job_id 编号),供 shell 用来跟踪作业,以及用作标识符来指示特定作业。此外,shell 会持续跟踪当前前一个作业。当前作业是指要启动或重新启动的最新作业。前一个作业是指第一个非当前作业。

可接受的作业标识符的语法为以下形式:

%job_id

其中,job_id 可以指定为以下格式之一:

%+

表示当前作业

表示前一个作业

?<string>

指定其命令行唯一包含 string 的作业。

n

表示作业编号 n,其中 n 是一个作业编号

pref

其中,pref 是命令名称的唯一前缀(例如,命令 ls −l name 正在后台运行时,它可以被引用为 %ls);pref 不得包含空格,除非用引号将空格引起。

当启用了作业控制时,fg 会在前台恢复执行已停止的作业,此外还会将正在执行的后台作业移至前台。如果省略了 %job_id,则将使用当前作业。

当启用了作业控制时,bg 会在后台恢复执行已停止的作业。如果省略了 %job_id,则将使用当前作业。

stop 使用后台作业的 job_id 停止执行这类作业,或者使用其 pid 停止执行任何进程;请参见 ps(1)

csh

未指定参数时,C shell 内置的 jobs 会列出处于作业控制之下的活动作业。

–l

除普通信息外,还列出进程 ID。

shell 会将一个 job_id 编号与每个命令序列相关联,以便跟踪正在后台运行的或者已被 TSTP 信号(通常是 Ctrl-Z)停止的那些命令。当使用 & 元字符在后台启动了一个命令或命令序列(以分号分隔的列表)时,shell 将显示一行内容,其中包含作业编号(位于方括号内)以及关联的进程编号的列表:

[1] 1234

要查看当前的作业列表,请使用 jobs 内置命令。最近停止的作业(如果没有作业已停止,则为放入后台的作业)将被引用为当前作业并由一个 "+" 予以指示。前一个作业由一个 "" 予以指示;在当前作业终止或者被移到前台时,该作业将取代它的位置(成为新的当前作业)。

要对作业进行操作,请引用 bgfgkillstop% 内置命令。

对作业的引用以 `%' 开头。单独使用百分号可引用当前作业。

% %+ %%

当前作业。

%−

前一个作业。

%j

按如下方式引用作业 j:`kill –9 %j'。j 可以是一个作业编号,或者是一个唯一地指定启动该作业时所用命令行的字符串;例如,`fg %vi' 可以将某个已停止的 vi 作业带到前台。

%?string

指定命令行唯一地为其包含了 string 的作业。

如果在后台运行的作业尝试从终端进行读取,则该作业将停止。后台作业可以正常产生输出,但可以使用 `stty tostop' 命令对此进行禁止。

fg 将当前的或指定的 job_id 带到前台。

bg 在后台运行当前的或指定的作业。

stop 使用后台作业的 job_id 停止执行这类作业,或者使用其 pid 停止执行任何进程;请参见 ps(1)

notify 在当前作业或指定作业的状态改变时,以异步方式通知用户。

ksh88

jobs 显示当前 shell 环境中已启动的作业的状态。当 jobs 报告了某个作业的终止状态时,shell 会从当前 shell 执行环境中的已知作业列表删除其进程 ID。

job_id 指定要显示其状态的作业。如果未指定 job_id,则会显示所有作业的状态信息。

以下选项可修改或增强 jobs 的输出内容:

–l

(字母 ell。)提供列出的每个作业的更多信息。此信息包括作业编号、当前作业、进程组 ID、状态以及构成作业的命令。

–n

只显示自上一次通知以来停止或退出的作业。

–p

只显示所选作业的进程组领头者的进程 ID。

缺省情况下,jobs 会显示所有已停止的作业、正在运行的后台作业以及其状态已改变但 shell 尚未报告的所有作业的状态。

如果启用了 set 命令的 monitor 选项,则交互式 shell 会将 job 与每个管道相关联。shell 保存当前作业的表,并使用 jobs 命令输出此表,然后为这些作业分配较小的整数。使用 & 异步启动作业时,shell 输出如下行:

[1] 1234

这表示异步启动的作业的作业编号为 1,并且该作业具有一个(顶级)进程,其进程 ID 为 1234

如果您正在运行一个作业,并希望执行其他工作,可以按下键 ^Z (Ctrl-Z),此时会向当前作业发送 STOP 信号。正常情况下,shell 随后会指明该作业 “已停止”(请参见下文中的输出),并输出另一个提示符。然后,您可以处理此作业的状态,使用 bg 命令将其放置到后台,或者运行某些其他命令,最后使用前台命令 fg 将其放回到前台。^Z 会立即生效,并在键入时放弃暂挂输出和未读输入,因此它与中断相似。

在 shell 中引用作业有多种方法。根据作业的任何进程的进程 ID 或下列各项之一可以引用作业:

%number

带有指定编号的作业。

%string

其命令行以 string 开头的任何作业;仅当历史记录文件处于活动状态时,在交互式模式下有效。

%?string

其命令行包含 string 的任何作业;仅当历史记录文件处于活动状态时,在交互式模式下有效。

%%

当前作业。

%+

等效于 %%

%−

以前的作业。

当进程更改状态时,shell 可立即获悉。当作业已被阻塞以致无法执行其他进程时,shell 通常会向您发送通知,但仅在输出提示前发送此通知。其目的是为了避免打扰您的工作。当启用了监视模式时,完成的每个后台作业都会触发为 CHLD 设置的所有陷阱。试图在作业正在运行或已停止期间离开 shell 时,系统会发出 "You have stopped (running) jobs" 这一警告。此时可以使用 jobs 命令查看是哪些作业。如果您执行此操作或立即尝试再次退出,shell 不会向您发出第二次警告,并会终止已停止的作业。

fg 会将当前环境中的后台作业移至前台。使用 fg 将作业置于前台时,系统会从当前 shell 执行环境中的已知作业列表中删除该作业的进程 ID。fg 命令仅在支持作业控制的系统上可用。如果未指定 job_id,则会将当前作业带到前台。

bg 会恢复当前环境中的挂起作业,将它们作为后台作业运行。如果 job_id 指定的作业已经是正在运行的后台作业,则 bg 不会起作用,而且会成功退出。使用 bg 将作业置于后台会导致该作业的进程 ID 成为当前 shell 执行环境中的已知 ID,就像它作为异步列表启动一样。bg 命令仅在支持作业控制的系统上可用。如果未指定 job_id,则会将当前作业置于后台。

stop 使用后台作业的 job_id 停止执行这类作业,或使用其 pid 停止执行任何进程。请参见 ps(1)

ksh

jobs 在标准输出上显示由当前 shell 环境启动的指定作业的信息。该信息包括作业编号(括在 [...] 中)、状态,以及启动该作业的命令行。

如果省略了 job_id,则 jobs 将显示所有已停止的作业、后台作业以及自 shell 上次报告以来状态已发生变化的所有作业的状态。

jobs 报告了某个作业的终止状态时,shell 会从当前 shell 环境中的已知作业列表中删除该作业。

以下选项可修改或增强 jobs 的输出内容:

–l

除了通常的信息外,还在作业编号后面显示进程 ID。

–n

只显示自上次显示提示以来状态已发生变化的作业。

–p

显示指定作业的进程组领头者 ID。

job_id 可按照以下方式之一指定给 jobsfgbg

number

job 的进程 ID。

-number

job 的进程组 ID。

%number

作业编号。

%string

名称以 string 开头的作业。

%?string

名称包含 string 的作业。

%+
%%

当前作业。

%-

前一个作业。

fg 依次将指定作业置于前台,并发送 CONT 信号启动每个作业,使其开始运行。如果省略了 job_id,则会将最近启动或停止的后台作业移到前台。

bg 将指定作业置于后台,并发送 CONT 信号启动它们,使其开始运行。如果省略了 job_id,则会在后台恢复或继续运行最近启动或停止的后台作业。

输出

输出

如果指定了 –p 选项,则输出针对每个进程 ID 包含一行:

"%d\n", "process ID"

否则,如果未指定 –l 选项,输出内容为以下形式的一系列行:

"[%d] %c %s %s\n", job-number, current, state, command

其中的各个字段如下所述:

current

字符 + 标识将用作 fgbg 命令的缺省作业的作业。此作业也可以使用 job_id %+%% 指定。字符 标识将在当前缺省作业退出时变为缺省作业的作业;此作业也可以使用 job_id %− 指定。对于其他作业,此字段为空格字符。最多只能有一个作业可以标识有 +,同样,最多也只能有一个作业可以标识有 。如果存在任何挂起的作业,则当前作业是某个挂起的作业。如果存在至少两个挂起的作业,则前一个作业也是挂起的作业。

job-number

一个可用来为 waitfgbgkill 实用程序标识进程组的编号。使用这些实用程序时,可通过在作业编号前加上 % 前缀来标识作业。

state

POSIX 语言环境中的以下字符串之一:

Running

表示作业尚未被信号挂起且尚未退出。

Done

表明作业已完成且返回了零退出状态。

Done(code)

表明作业已正常完成,并且退出时返回了指定的非零退出状态,即以十进制数字表示的 code

Stopped

表明作业已停止。

Stopped(SIGTSTP)

表明作业已被 SIGTSTP 信号挂起。

Stopped(SIGSTOP)

表明作业已被 SIGSTOP 信号挂起。

Stopped(SIGTTIN)

表明作业已被 SIGTTIN 信号挂起。

Stopped(SIGTTOU)

表明作业已被 SIGTTOU 信号挂起。

实现可能会使用字符串 Suspended 替换 Stopped。如果作业被某个信号终止,则 state 的格式不确定,但它与此处所示的所有其他 state 明显不同,而且会提供导致作业终止的信号的名称或描述。

command

指定给 shell 的关联命令。

如果指定了 –l 选项,则会在 state 字段之前插入一个包含进程组 ID 的字段。此外,可以只使用进程 ID 和 command 字段将进程组中的其他进程输出到不同的行。

环境变量

有关影响 jobsfgbg 执行的以下环境变量的描述,请参见environ(5):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH。

退出状态

sh、csh、ksh88

jobsfgbg 可以返回以下退出值:

0

成功完成。

>0

出现错误。

ksh

jobs 可以返回以下退出值:

0

每个作业的信息都写入到了标准输出。

>0

一个或多个作业不存在。

fg 可返回以下退出值:

上一个作业的退出状态

一个或多个作业已被带到前台。

非零值

一个或多个作业不存在或已完成。

bg 可返回以下退出值:

0

所有后台作业都已启动。

>0

一个或多个作业不存在或不存在后台作业。

属性

有关下列属性的说明,请参见 attributes(5)

csh、sh、ksh88

属性类型
属性值
可用性
system/core-os
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

ksh

属性类型
属性值
可用性
system/core-os
接口稳定性
Uncommitted(未确定)

另请参见

csh(1)kill(1)ksh(1)ksh88(1)ps(1)sh(1)stop(1)shell_builtins(1)stty(1)wait(1)signal.h(3HEAD)attributes(5)environ(5)standards(5)