bash - 如何使用 find -exec 命令创建后台进程并等待它们?
问题描述
我有一个主 bash 脚本,它应该启动另一个具有不同输入的 bash 脚本作为后台进程,然后等待它。为此,我正在使用find dir_path -exec bash -c '. another_batchscript.sh {} $0' ${second_input} \;
(类似于此处),然后我的wait
主脚本中有一个命令。问题是这个脚本几乎立即完成。
我想了想,意识到当我sleep 10 &
从命令行执行时,我可以通过执行jobs
命令找到工作。但是当我执行bash -c 'sleep 10 &'
然后jobs
找不到它。这可能是等待命令在我的主 bash 脚本中没有阻塞的原因。
为什么会发生这种情况,我必须如何更改主批处理脚本中的命令来解决我的问题?
解决方案
当你对你正在尝试做的事情不是很坦率时,很难回答你,但从你所说的来看,我认为find ... -exec
await
不是正确的方法。
我只能提出一些模糊的建议如下:
运行
find
并将生成的文件名放入bash
数组或文件中,然后循环遍历该数组或文件,在后台运行您想要执行的任何操作并wait
在末尾添加 a将文件名运行
find
并通过管道传输到GNU Parallel并像这样并行运行作业,对进度报告、CPU 使用率和参数替换有很多控制find ... -print0 | parallel -0 ...
推荐阅读
- stripe-payments - 路由号码的元素
- mariadb - MariaDB 查询双数据类型
- javascript - 如何在 then() 中使用异步函数?
- unity3d - 如何使用 LeanTween 淡化 TextMesh alpha?
- python - gpflow model.elbo 抛出 KeyError 和 NotImplementedError
- ios - 在 SceneKit 中使用 GIFU 库播放 GIF 会导致应用程序 UI 冻结任何解决方案?UIView Animated 从后台线程调用
- r - 用多行绘制行注释
- google-chrome-devtools - 是否有任何选项可以从 node.js 以编程方式启动 Profiler?
- java - 使用 java.time 将“ddMMMyyyy”格式的字符串解析为 java.sql.Date
- angular - @PreAuthorize("hasRole('ROLE_ADMIN')") 正在抛出 Forbidden