首页 > 解决方案 > 如何使用 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 脚本中没有阻塞的原因。

为什么会发生这种情况,我必须如何更改主批处理脚本中的命令来解决我的问题?

标签: bashfindexecbackground-process

解决方案


当你对你正在尝试做的事情不是很坦率时,很难回答你,但从你所说的来看,我认为find ... -execawait不是正确的方法。

我只能提出一些模糊的建议如下:

  • 运行find并将生成的文件名放入bash数组或文件中,然后循环遍历该数组或文件,在后台运行您想要执行的任何操作并wait在末尾添加 a

  • 将文件名运行find并通过管道传输到GNU Parallel并像这样并行运行作业,对进度报告、CPU 使用率和参数替换有很多控制

    find ... -print0 | parallel -0 ...


推荐阅读