Linux 中的等待命令
wait是Linux的内置命令,用于等待任何正在运行的进程完成。 wait 命令与特定进程 ID 或作业 ID 一起使用。当多个进程在 shell 中运行时,当前 shell 只能知道最后一个命令的进程 ID。如果这次执行了 wait 命令,那么它将应用于最后一个命令。如果 wait 命令没有给出进程 ID 或作业 ID,那么它将等待所有当前子进程完成并返回退出状态。
wait 命令的退出状态值取决于最后指定的操作数指示的命令。当任何进程异常终止时,退出状态将大于128,并且应与其他命令的退出状态值不同。当 wait 命令在没有操作数的情况下调用并且当前 shell 已知的所有进程 ID 均已终止时,该命令将以值 0 退出。如果 wait 命令检测到任何错误,则它返回 1 到 126 之间的任何值。如果最后一个进程 ID 未知,则 wait 命令以值 127 退出。本教程中介绍了如何在 Linux 中使用 wait 命令。
示例 1:对多个进程使用 wait 命令
执行以下脚本后,两个进程将在后台运行,第一个 echo 命令的进程 ID 存储在 $process_id 变量中。当使用 $process_id 执行 wait 命令时,下一个命令将等待完成第一个 echo 命令的任务。第二个等待命令与“$!”一起使用,这表示最后运行的进程的进程 ID。 ‘$?’用于读取等待命令的状态值。
echo "testing wait command1" &
process_id=$!
echo "testing wait command2" &
wait $process_id
echo Job 1 exited with status $?
wait $!
echo Job 2 exited with status $?
输出:
示例2:使用kill命令后测试等待命令
在以下脚本中,终止进程后执行 wait 命令。 sleep命令作为后台进程运行,执行kill命令终止正在运行的进程。之后,使用已终止进程的进程 ID 执行 wait 命令。输出将显示已终止进程的进程 ID。
echo "Testing wait command"
sleep 20 &
pid=$!
kill $pid
wait $pid
echo $pid was terminated.
输出:
示例3:检查退出状态值
在以下脚本中,函数 check() 由两个参数值调用。本教程开头讨论过,如果 wait 命令执行成功,退出值将为 0,如果 wait 命令检测到任何错误,则它将返回 1 到 126 之间的任何值。运行脚本后,如果传递 0 作为第二个参数value 然后 wait 命令成功终止,如果您传递任何大于零的值,则它将失败终止。
function check()
{
echo "Sleep for $1 seconds"
sleep $1
exit $2
}
check $1 $2 &
b=$!
echo "Checking the status"
wait $b && echo OK || echo NOT OK
输出:
$ bash wait3.sh 3 5