本文介绍: bash wait 命令一个 Shell 命令,它等待后台运行进程完成并返回退出状态。与等待指定时间的sleep 命令不同,该wait命令等待所有或特定后台任务完成。

shell wait 等待命令

在这里插入图片描述

1. 简介

bash wait 命令一个 Shell 命令,它等待后台运行进程完成并返回退出状态。与等待指定时间的sleep 命令不同,该wait命令等待所有或特定后台任务完成。

2. 语法

bash 脚本使用wait命令有不同的方法。下表解释每个用例

命令 解释
wait 如果没有任何参数,该wait命令会等待所有后台进程完成,然后再继续执行脚本
wait 添加的 PID 或作业 ID 会等待特定进程结束,然后再继续执行脚本
wait -n 仅等待以下后台进程完成并返回退状态
wait -f 终止程序首先等待后台任务完成后再退出。

3. 示例

3.1 等待命令

bash 脚本使用wait时需要了解三个附加参数

查看这三个参数如何协同工作,请打开终端窗口运行

sleep 10 &
echo $!
echo $?

在这里插入图片描述
$!参数存储后台进程PID,同时$?存储退出状态。退出状态0表示命令成功完成。

3.2 单进程等待

  1. 首先打开终端创建一个简单的后台进程:
sleep 10 &
  1. 确认作业在后台运行
jobs -l
  1. 使用wait不带任何参数的命令暂停直到进程完成:
wait

在这里插入图片描述
在这里插入图片描述
10 秒后(由于sleep 10),控制打印完成消息

3.3 单进程 bash 等待

使用该wait命令指示后台进程必须在脚本内执行的时间点。

  1. 例如,在文本编辑器中添加以下代码
#!/bin/bash
echo Background process &
echo First message
echo Second message
wait
echo Third message

如果后台进程没有完成第一个和第二个进程,则该wait命令调用暂停以等待第二个进程之后后台进程完成,然后再继续执行第三个进程。

  1. 脚本另存为single_process.sh。在终端中,更改权限以使脚本可执行:
sudo chmod +x single_process.sh
  1. 运行脚本
./single_process.sh

在这里插入图片描述
后台进程在命令之前的任何时间完成wait,并且脚本继续。

3.4 多个进程等待

1.打开文本编辑器,添加以下多进程脚本:

#!/bin/bash
sleep 10 &
sleep 15 &
sleep 5 &
echo $(date +%T)
wait 
echo $(date +%T)

wait该脚本在命令之前和之后打印当前时间。没有任何参数,程序会等待所有进程完成。

  1. 将脚本另存为test.sh关闭文件接下来,使脚本可执行:
sudo chmod +x test.sh
  1. 最后运行程序:
./test.sh

在这里插入图片描述
由于进程在后台运行,所有三个进程都在十五秒内完成。

  1. 使用相同的脚本测试以下用例
  • -n参数添加到<strong>wait</strong>. 只有最快的过程完成,脚本在十秒后结束。
  • 添加作业 ID 以指示脚本应等待哪个作业。例如,wait %1暂停以等待进程 1 ( sleep 10) 完成。

3.5 多个进程 bash 等待 PID

  1. 与多个进程一起工作时,使用 PID标识一个进程。下面的示例脚本显示了一个用例
#!/bin/bash
echo "Process 1 lasts for 2s" &amp;&amp; sleep 2 &amp;
PID=$!
echo "Process 2 lasts for 3s" &amp;&amp; sleep 3 &amp;
echo "Current time $(date +%T)"
wait $PID
echo "Process 1 ended at time $(date +%T) with exit status $?"
wait $!
echo "Process 2 ended at time $(date +%T) with exit status $?"
  1. 将脚本另存为multi_wait.sh。使脚本可执行:
sudo chmod +x multi_wait.sh
  1. 运行脚本查看输出
./multi_wait.sh

在这里插入图片描述
该脚本需要两秒钟来完成第一个过程(由于sleep2)和三秒钟来完成第二个过程。这两个过程同时执行,都在三秒内完成。

参考:

原文地址:https://blog.csdn.net/xixihahalelehehe/article/details/127348688

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_13761.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注