Linux 中如何等待特定进程完成?Linux 中如何等待特定进程完成?Linux 中如何等待特定进程完成?Linux 中如何等待特定进程完成?
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 中如何等待特定进程完成?

Linux中有一个wait命令,用于等待系统中一个或多个进程完成。 Linux 的多功能 wait 命令允许我们找出特定进程何时完成。结果将返回终止状态,使我们能够确定进程是否成功终止或因其他原因失败。 wait 命令在等待特定后台任务完成时继续运行。 Linux wait 命令在下面的用例中使用,以展示其功能。

示例#1:对 Bash 单进程使用等待命令。

我们使用 wait 命令来指定脚本的后台进程何时必须开始处理。在下面的 bash 脚本中,我们使用了 echo 命令,该命令打印语句“Background Process”,这意味着后台进程正在处理。在这个 echo 命令中,我们使用了符号“&”,它用于在后台运行命令。然后,我们再次使用两个 echo 命令来打印语句“第一个任务”和“第二个任务”。

之后,我们调用等待,它将暂停以等待后台进程在第二个进程之后完成,然后再继续第三个进程。第三个任务将在后台进程终止时处理,后台进程随时会结束。

#!/bin/bash

echo Background process &
echo First task
echo Second task
wait
echo Third task

wait命令的输出显示,第一个任务和第二个任务完成后,第三个任务正在处理。当第一个和第二个任务需要时间才能完成时,wait 命令会生成语句“后台进程”。

Linux@VirtualBox:~ bash ./Bash.sh

First task
Second task
Background process

Third task

示例#2:对 Bash 多进程使用 Wait 命令。

由于早期的 bash 脚本对单个进程使用 wait 命令,因此我们在 bash 脚本中使用 wait 命令来执行多个进程。当 wait 命令与 -n 标志一起使用时,它只等待后台进程中的初始进程。下面提供了 bash 脚本,我们首先部署了具有特定值的三个睡眠命令集。 sleep 命令是用我们之前讨论过的符号“&”定义的,它表示后台进程正在运行。

第一个睡眠命令表示后台进程需要“10”秒才能完成。后台进程需要“5”秒才能完成,第三个睡眠命令需要“3”秒才能执行后台进程。接下来,调用 wait -n 命令,该命令仅等待最短的进程。这里,在其他进程中,最短的进程需要三秒来完成。当最短的过程完成时,将打印回显语句“完成第一个作业”。

之后,我们再次部署 wait -n 命令。这将再次等待耗时较少的过程。现在,耗时3秒的过程执行完毕后,耗时较少的过程只需5秒。等待该过程五秒钟后,将显示下一条回显语句“已完成下一个作业”。下一个wait命令不使用任何标志,这意味着该wait命令将首先等待所有进程完成,然后显示echo语句“Completed all job”。

#!/bin/bash

sleep 10 &
sleep 5 &
sleep 3 &
wait -n
echo “Completed first job.”
wait -n
echo “Completed next job.”
wait
echo “Completed all job.”

使用上面的 wait 命令的多个进程的 bash 脚本的结果显示在以下 bash shell 屏幕上。使用选项 -n 命令的等待会暂停 3 秒和 5 秒,这是第一个和下一个作业完成等待命令所需的时间,然后暂停 10 秒,这是剩余后台所需的时间流程来完成。

Linux@VirtualBox:~ bash ./Bash.sh

“Completed first job.”
“Completed next job.”
“Completed all job.”

示例#3:使用带有进程 ID 的 Bash 多进程等待命令。

当我们使用 wait 命令在 bash 脚本中处理多个进程时,进程 ID 有助于识别进程。在 bash 脚本中,我们使用 echo 命令打印语句“Process1 for 3秒”。然后,我们使用AND运算符“&&”设置另一个命令,即睡眠命令。 sleep 命令的值为“3”,这是后台进程完成的时间。然后,我们声明了变量“ProcessID”,它提供了“$! “ 价值。符号“$! ” 获取最后执行的命令的进程ID。最后执行的命令需要“3”秒,存储在变量“ProcessID”中。

现在,我们指定了另一个 echo 命令,它与 sleep 命令一起打印“Process1 for 5 秒”。 sleep 命令需要五秒钟才能完成第二个后台进程。接下来,我们使用 bash 的 DateTime 结构打印当前时间。然后,使用等待命令,其中变量“ProcessID”被设置为参数。 wait 命令现在保存 processID 变量的等待时间,即三秒。

三秒钟后,bash脚本的剩余过程将完成。请注意,我们还有另一个等待命令,它通过符号“$! ” 作为参数然后,最后一条 echo 语句将被执行。用于获取最后运行命令的进程 ID。

#!/bin/bash
echo "Process1 for 3 second" && sleep 3 &
ProcessID=$!
echo "Process1 for 5 second" && sleep 5 &
echo "Current time $(date +%T)"
wait $ProcessID
echo "Process1 termination time $(date +%T) with exit status $?"
wait $!
echo "Process2 termination time $(date +%T) with exit status $?"

输出首先显示该过程的完成情况以及完成时间。至此,当前时间流程结束。之后,发生等待,然后执行下一个 echo 命令,该命令显示退出状态值零以及终止时间。退出状态值为零表示进程已成功终止。然后,在最后一个进程完成所需的时间内发生暂停,并且将显示最后一条语句。

Linux@VirtualBox:~ bash ./Bash.sh

Process1 for 5 second

Process1 for 3 second

Current time 00:31:20

Process1 termination time 00:31:23 with exit status 0

Process2 termination time 00:31:25 with exit status 0

结论

本文提供了一种在 Linux 中等待特定进程完成的方法。我们使用了 wait 命令来等待正在运行的进程。我们首先使用 wait 命令让单个进程等待,然后我们调用 wait 命令让多个进程等待。然后,通过进程ID调用wait命令来获取多个进程的进程ID。

©2015-2025 艾丽卡 support@alaica.com