Bash 异步任务

首页 / Shell/Bash / Bash 异步任务

Bash脚本有时候需要同时执行多个任务。通常这涉及到启动一个脚本,依次,启动一个或多个子脚本来执行额外的任务,而父脚本继续运行。然而,当一系列脚本 以这种方式运行时,要保持父子脚本之间协调工作,会有一些问题。也就是说,若父脚本或子脚本依赖于另一方,并且 一个脚本必须等待另一个脚本结束任务之后,才能完成它自己的任务,这应该怎么办?

bash 有一个内置命令,能帮助管理诸如此类的异步执行的任务。wait 命令导致一个父脚本暂停运行,直到一个 特定的进程(例如,子脚本)运行结束。

首先我们将演示一下 wait 命令的用法。为此,我们需要两个脚本,一个父脚本:

#!/bin/bash
# async-parent : Asynchronous execution demo (parent)
echo "Parent: starting..."
echo "Parent: launching child script..."
async-child &
pid=$!
echo "Parent: child (PID= $pid) launched."
echo "Parent: continuing..."
sleep 2
echo "Parent: pausing to wait for child to finish..."
wait $pid
echo "Parent: child is finished. Continuing..."
echo "Parent: parent is done. Exiting."

和一个子脚本:

#!/bin/bash
# async-child : Asynchronous execution demo (child)
echo "Child: child is running..."
sleep 5
echo "Child: child is done. Exiting."

在这个例子中,我们看到该子脚本是非常简单的。真正的操作通过父脚本完成。在父脚本中,子脚本被启动, 并被放置到后台运行。子脚本的进程 ID 记录在 pid 变量中,这个变量的值是 $! shell 参数的值,它总是 包含放到后台执行的最后一个任务的进程 ID 号。

父脚本继续,然后执行一个以子进程 PID 为参数的 wait 命令。这就导致父脚本暂停运行,直到子脚本退出, 意味着父脚本结束。

当执行后,父子脚本产生如下输出:

$ async-parent
Parent: starting...
Parent: launching child script...
Parent: child (PID= 6741) launched.
Parent: continuing...
Child: child is running...
Parent: pausing to wait for child to finish...
Child: child is done. Exiting.
Parent: child is finished. Continuing...
Parent: parent is done. Exiting.

教程来源:网道(WangDoc.com)以及 Github 无私奉献

这一章《Bash 异步任务》你学到了什么?做站不易,你的分享是对我们最大的支持,感谢!😊

相关文章

推荐系统三十六式 -〔刑无刀 - 40讲〕

罗剑锋的C++实战笔记 -〔罗剑锋 - 30讲〕

说透数字化转型 -〔付晓岩 - 18讲〕

手把手带你搭建秒杀系统 -〔佘志东 - 17讲〕

在数组 Js 中映射数组

异步等待不等待对象填充 axios.get

pandas DataFrame 中 x 天内每个元素的累积乘积

正确缩小 Solid.js 中的访问器类型

将多个查询返回格式化为 JSON 对象

如何使用带有 onChange 函数 REACT 的 useCallback 钩子

视频推荐〔Shell/Bash - 36_监控脚本总结〕

更多视频 »