手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

wait(1)

名称

wait - 等待进程完成

用法概要

 

/bin/sh

wait [pid]...

/bin/jsh /bin/ksh88 /usr/xpg4/bin/sh

wait [pid]...
wait [% jobid...]

/bin/csh

wait

ksh

wait [job...]

描述

shell 在不创建新进程的情况下自行执行 wait。如果收到错误消息 cannot fork,too many processes,则尝试使用 wait 命令清理后台进程。如果上述做法无效,则可能表示系统进程表已满,或者活动的前台进程过多。对与登录名关联的进程 ID 数目以及系统可跟踪的进程数目有所限制。

并非分为三个或更多阶段的流水线中的所有进程都是 shell 的子进程,因此无法等待其完成。

/bin/sh、/bin/jsh

等待进程 ID 为 pid 的后台进程完成,并报告其终止状态。如果省略了 pid,则会等待 shell 的所有当前活动后台进程完成,返回代码为 0。启用了作业控制 (jsh) 且参数 jobid 前面有百分号 (%) 时,wait 实用程序将接受作业标识符。

如果 pid 不是活动进程 ID,wait 实用程序将立即返回,返回代码为 0

csh

等待后台进程。

ksh88

如果 shell 启动了异步列表,每个异步列表元素中最后一个命令的进程 ID 将成为当前 shell 执行环境中的已知 ID。

如果调用了 wait 实用程序而未指定任何操作数,它将等到正在调用的 shell 已知的所有进程 ID 全部终止,以退出状态 0 退出。

如果指定了一个或多个 pidjobid 操作数且其表示已知进程 ID(或作业 ID),wait 实用程序将等到它们全部终止。如果指定了一个或多个 pidjobid 操作数且其表示未知进程 ID(或作业 ID),wait 会将其当作以如下退出状态退出的已知进程 ID(或作业 ID)一样处理:127.wait 实用程序返回的退出状态是最后一个 pidjobid 操作数请求的进程的退出状态。

已知进程 ID 仅适用于在当前 shell 执行环境中调用 wait

ksh

如果未指定任何操作数,wait 将等到正在调用的 shell 已知的所有作业全部终止。如果指定了一个或多个作业操作数,wait 将等到它们全部完成。可将每个作业指定为以下各项之一:

number

number 指的是进程 ID。

-number

number 指的是进程组 ID。

%number

number 指的是作业编号

%string

指的是其名称以 string 开头的作业

%?string

指的是其名称包含 string 的作业

%+
%%

指的是当前作业

%-

指的是前一个作业

如果一个或多个作业操作数是当前 shell 环境未知的进程 ID 或进程组 ID,wait 会将其当作以状态 127 退出的进程一样处理。

操作数

支持下列操作数:

pid

命令的无符号十进制整数进程 ID,实用程序要等待其对应的进程终止。

jobid

作业控制作业 ID,标识要等待的后台进程组。作业控制作业 ID 表示法仅适用于在当前 shell 执行环境中调用 wait,而且只能在支持作业控制选项的系统上调用。

用法

在大多数实现程序中,wait 是一个 shell 内置命令。如果它的调用发生在子 shell 或单独的实用程序执行环境中,例如以下环境之一:

(wait)
nohup wait ...
find . -exec wait ... \;

它将立即返回,因为这些环境中没有要等待终止的已知进程 ID。

示例

示例 1 使用脚本确定终止信号

尽管信号终止进程时使用的确切值不确定,但是如果知道某个信号终止了进程,脚本仍然能够可靠地找出正在使用 kill 的信号,如下列(/bin/ksh88/usr/xpg4/bin/sh)所示:

sleep 1000&
pid=$!
kill -kill $pid
wait $pid
echo $pid was terminated by a SIG$(kill -l $(($?−128))) signal.
示例 2 返回进程的退出状态

如果以下命令序列运行的时间小于 31 秒(/bin/ksh88/usr/xpg4/bin/sh):

sleep 257 | sleep 31 &

jobs -l %%

则以下任一命令均可返回流水线中第二个 sleep 的退出状态:

wait <pid of sleep 31>
wait %% 

环境变量

有关影响 wait 执行的环境变量 LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH 的说明,请参见 environ(5)

退出状态

ksh

ksh 中的 wait 内置命令将返回以下退出值:

0

调用 wait 时未指定任何操作数。正在调用的进程已知的所有进程全部终止。

127

job 是当前 shell 环境未知的进程 ID 或进程组 ID。

属性

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

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

另请参见

csh(1)jobs(1)ksh(1)ksh88(1)pwait(1)sh(1)attributes(5)environ(5)standards(5)