【问题标题】:How to use the find -exec command to create background processes and wait for them?如何使用 find -exec 命令创建后台进程并等待它们?
【发布时间】:2021-01-04 20:39:11
【问题描述】:

我有一个主 bash 脚本,它应该启动另一个具有不同输入的 bash 脚本作为后台进程,然后等待它。为此,我使用find dir_path -exec bash -c '. another_batchscript.sh {} $0' ${second_input} \;(类似于here),然后在我的主脚本中有一个wait 命令。问题是这个脚本几乎马上就完成了。

我想了想,当我从命令行执行sleep 10 & 时,我可以通过执行jobs 命令找到工作。但是当我执行bash -c 'sleep 10 &' 时,jobs 将找不到它。这可能就是为什么 wait 命令在我的主 bash 脚本中没有阻塞的原因。

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

【问题讨论】:

  • 您的问题似乎有点停留在后台任务和等待的细节中。也许退后一步,说出你真正想要做的事情。
  • 我不确定您的确切意思。我对启动后台进程的一般方法感兴趣,其中每个进程执行一个具有不同输入的 bash 脚本,然后我想等待它们完成。目前,我正在研究一个特殊情况,它会很有用,但我不确定谈论这些脚本的确切内容是否会有所帮助。问题是我的主脚本不会等待它使用上述 find -exec 命令启动的进程,这应该独立于 bash 脚本的内容,不是吗?
  • 我的主脚本如上所述:首先是 find -exec 命令,然后等待。但它几乎立即完成,因为我怀疑等待命令在这里不起作用。请参阅上面我与作业命令争论的地方,即以这种特殊方式使用此 find -exec 命令启动的进程似乎不被识别为子进程

标签: bash find exec background-process


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    相关资源
    最近更新 更多