如何在 Linux 中使用 Bash wait 命令

bash-wait-command-2-750x422-1

在 shell 脚本的世界中,进程管理和同步是至关重要的。Bashwait 命令是协调和调节多个进程的执行流程的一种快速简便的方法。了解如何wait 正确使用命令可以大大提高 shell 脚本的效率和可靠性。在本文中,我们将解构 Bash wait 命令,了解它的特性、典型用例和Linux中的最佳实践。

先决条件

  • 访问命令行/终端。
  • 管理员 ( sudo) 权限。
  • 文本编辑器,例如 Vim 或 Nano。

Bash 等待命令的语法

句法 描述
wait 等待子进程终止。
wait [-n] job_id 等待具有指定 job_id 的作业终止。 如果作业已经终止,该 -n 选项会 立即返回。wait
wait -n 等待下一个后台作业终止。
Bash 等待命令语法

等待指令

在 bash 脚本中使用时wait,还需要注意三个参数:

你可能还喜欢

Oracle-java-17-1-120x86-1

如何在 Debian 上安装 Oracle Java 17

python-pandas-120x86-1

如何使用 Python Pandas 填充缺失数据

  1. 命令后的符号 (&) 表示后台作业。
  2. $!返回PID最近后台进程的。使用多个后台进程时,请记住将前一个进程保存PID在变量中。
  3. $? 显示最后一个进程的退出状态。

要显示这三个因素如何相互作用,请启动一个终端窗口并键入:

sleep 10 &
echo $!
echo $?
cloudbooklet@cloudbooklet:~$ sleep 10 &
[1] 15680 -
cloudbooklet@cloudbooklet:~$ echo 1
15680
cloudbooklet@cloudbooklet:~$ echo
0
cloudbooklet@cloudbooklet:~$

$!参数持有后台进程PID,而 $? 存储退出状态。退出状态 0 表示命令成功。

单进程等待

首先打开终端并运行以下后台进程:

sleep 10 &

通过键入以下内容确认作业正在后台执行:

jobs -l

注意: 如果作业标记为已完成,请考虑将休眠时间增加到 10 秒以上。

使用wait不带任何参数的命令暂停,直到程序完成:

wait
cloudbooklet@cloudbooklet:~$ sleep 10 &
[1] 49866
cloudbooklet@cloudbooklet:~$ jobs -l
[1]+ 49866 Running                                sleep 10 &
cloudbooklet@cloudbooklet:~$ wait

终端正在等待后台进程完成。

cloudbooklet@cloudbooklet:~$ sleep 10 &
[1] 49866
cloudbooklet@cloudbooklet:~$ jobs -l
[1]+ 49866 Running                sleep 10 &
cloudbooklet@cloudbooklet:~$ wait
[1]+ Done               sleep 10 &            

终端在 10 秒后打印 Done 消息(由于 sleep 10)。

单进程 Bash 等待

使用该wait命令指定脚本中的后台进程何时必须执行。

  1. 例如,在文本编辑器中,输入以下代码:
#!/bin/bash

echo Background process &
echo First message
echo Second message
wait
echo Third message
~
~

如果后台进程没有完成第一个和第二个进程,该wait 命令会导致暂停,以便wait后台进程在继续执行第三个进程之前完成第二个进程。

  1. 将脚本另存为single_process.sh. 更改终端中的权限以使脚本可执行:
sudo chmod +x single_process.sh
  1. 使用以下命令运行脚本:
./single_process.sh
cloudbooklet@cloudbooklet:~$ ./single_process.sh
First process
second process
Background process 
Third process
cloudbooklet@cloudbooklet:~$

指令执行后后台进程结束wait,脚本继续执行。

多进程 Bash 等待

  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
cloudbooklet@cloudbooklet:~$ ./test.sh
14:32:22
14:32:37
cloudbooklet@cloudbooklet:~$

因为操作在后台运行,所以这三个操作都在十五秒内完成。

  1. 运行相同的脚本来测试以下用例:
  • -n参数添加到wait. 只有最快的进程完成,脚本会在十秒内停止。
  • 添加作业 ID 以指定脚本应等待的作业。等待 %1 暂停以等待进程 1(睡眠 10)完成。

多进程 Bash 等待 PID

  1. 使用多个进程时,使用PID来标识进程。以下示例脚本说明了一个用例:
#!/bin/bash

echo "Process 1 lasts for 2s" && sleep 2 &
PID=$!
echo "Process 2 lasts for 3s" && sleep 3 &
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
cloudbooklet@cloudbooklet:~$ ./multi_process.sh
Process 1 lasts for 2s
Process 2 lasts for 3s
Current time 15:56:22
Process 1 ended at time 15:56:24 with exit status ©
Process 2 ended at time 15:56:25 with exit status ©
cloudbooklet@cloudbooklet:~$

该脚本在两秒内完成第一个过程(由于睡眠 2),在三秒内完成第二个过程。这两个操作同时运行,需要三秒钟才能完成。

另请阅读:您可能还会发现我们关于 如何使用 cd 命令在 Linux 中更改目录的指南很有用。

结论

最后,Bashwait 命令被证明是在 shell 脚本中管理进程同步的不可或缺的工具。它通过暂停执行直到定义的程序完成来确保有序执行并减少错误。将命令合并wait 到您的脚本中可以使您提高效率并有效地控制并发进程。请随时在下面的评论部分分享您的想法和反馈。

原创文章,作者:主机说,如若转载,请注明出处:https://www.hostingtalk.cn/how-to-use-bash-wait-command-in-linux/

发表回复

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

error: 内容保护