wait [pid]...
wait [pid]...
wait [% jobid...]
wait
wait [job...]
shell 在不创建新进程的情况下自行执行 wait。如果收到错误消息 cannot fork,too many processes,则尝试使用 wait 命令清理后台进程。如果上述做法无效,则可能表示系统进程表已满,或者活动的前台进程过多。对与登录名关联的进程 ID 数目以及系统可跟踪的进程数目有所限制。
并非分为三个或更多阶段的流水线中的所有进程都是 shell 的子进程,因此无法等待其完成。
等待进程 ID 为 pid 的后台进程完成,并报告其终止状态。如果省略了 pid,则会等待 shell 的所有当前活动后台进程完成,返回代码为 0。启用了作业控制 (jsh) 且参数 jobid 前面有百分号 (%) 时,wait 实用程序将接受作业标识符。
如果 pid 不是活动进程 ID,wait 实用程序将立即返回,返回代码为 0。
等待后台进程。
如果 shell 启动了异步列表,每个异步列表元素中最后一个命令的进程 ID 将成为当前 shell 执行环境中的已知 ID。
如果调用了 wait 实用程序而未指定任何操作数,它将等到正在调用的 shell 已知的所有进程 ID 全部终止,以退出状态 0 退出。
如果指定了一个或多个 pid 或 jobid 操作数且其表示已知进程 ID(或作业 ID),wait 实用程序将等到它们全部终止。如果指定了一个或多个 pid 或 jobid 操作数且其表示未知进程 ID(或作业 ID),wait 会将其当作以如下退出状态退出的已知进程 ID(或作业 ID)一样处理:127.wait 实用程序返回的退出状态是最后一个 pid 或 jobid 操作数请求的进程的退出状态。
已知进程 ID 仅适用于在当前 shell 执行环境中调用 wait。
如果未指定任何操作数,wait 将等到正在调用的 shell 已知的所有作业全部终止。如果指定了一个或多个作业操作数,wait 将等到它们全部完成。可将每个作业指定为以下各项之一:
number 指的是进程 ID。
number 指的是进程组 ID。
number 指的是作业编号
指的是其名称以 string 开头的作业
指的是其名称包含 string 的作业
指的是当前作业
指的是前一个作业
如果一个或多个作业操作数是当前 shell 环境未知的进程 ID 或进程组 ID,wait 会将其当作以状态 127 退出的进程一样处理。
支持下列操作数:
命令的无符号十进制整数进程 ID,实用程序要等待其对应的进程终止。
作业控制作业 ID,标识要等待的后台进程组。作业控制作业 ID 表示法仅适用于在当前 shell 执行环境中调用 wait,而且只能在支持作业控制选项的系统上调用。
在大多数实现程序中,wait 是一个 shell 内置命令。如果它的调用发生在子 shell 或单独的实用程序执行环境中,例如以下环境之一:
(wait) nohup wait ... find . -exec wait ... \;
它将立即返回,因为这些环境中没有要等待终止的已知进程 ID。
尽管信号终止进程时使用的确切值不确定,但是如果知道某个信号终止了进程,脚本仍然能够可靠地找出正在使用 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 中的 wait 内置命令将返回以下退出值:
调用 wait 时未指定任何操作数。正在调用的进程已知的所有进程全部终止。
job 是当前 shell 环境未知的进程 ID 或进程组 ID。
有关下列属性的说明,请参见 attributes(5):
|
csh(1)、jobs(1)、ksh(1)、ksh88(1)、pwait(1)、sh(1)、attributes(5)、environ(5)、standards(5)