linux - Shell:如何并行运行两个脚本A和B并在A结束时停止B
问题描述
假设我有一个 shell 脚本A.sh
,其内容是:
sleep 2
echo "A: 2s"
sleep 2
echo "A: 4s"
sleep 2
echo "A: 6s"
我还有一个 shell 脚本B.sh
,其内容是:
sleep 2
echo "B: 2s"
sleep 2
echo "B: 4s"
sleep 2
echo "B: 6s"
sleep 2
echo "B: 8s"
sleep 2
echo "B: 10s"
当我希望并行运行 A 和 B 时,我创建了一个脚本C.sh
,其内容是:
sh A.sh &
sh B.sh &
wait
输出是:
B: 2s
A: 2s
A: 4s
B: 4s
A: 6s
B: 6s
B: 8s
B: 10s
这样 A 和 B 可以并行运行。现在我还有一个要求,就是我希望在 A 结束时停止 B。我按照这里提到的步骤并修改C.sh
为:
parallel -j2 --halt now,success=1 ::: 'sh A.sh' 'sh B.sh'
输出是:
A: 2s
A: 4s
A: 6s
parallel: This job succeeded:
sh A.sh
看来B没有以这种方式运行。谁能告诉我并行运行两个脚本 A 和 B 并在 A 结束时停止 B 的正确方法是什么?
解决方案
并行运行两个脚本 A 和 B 并在 A 结束时停止 B?
所以就这样做吧。
sh B.sh &
b_pid=$!
{
sh A.sh
kill "$b_pid"
} &
wait
推荐阅读
- python - 如何将 .txt 文件的前 30 个字符添加到变量中?
- angular - 第二次推送代码到 Github
- apache-flink - flink中的vertexId是什么意思?
- python - 如何解决新/更新文件python列表问题
- reactjs - 如何将 React js 数组 [] 转换为 iOS 中的 NSArray 和 Android 中的 string[]?
- visual-studio - 如何在新的 Visual Studio 2019 中更改方法名称的字体颜色(从黄色开始)?
- python - 在不迭代的情况下查找字符串中的所有子字符串
- php - WordPress:当帖子从 wp admin 永久删除时,哪个钩子起作用
- sap - 无法使用 loadrunner 或 fiddler 记录 SAP BPC
- java - 在 @where 注释上应用自定义物理命名策略