相关疑难解决方法(0)

并行运行bash命令,跟踪结果和计数

我想知道如果可能的话,我可以在BASH中创建一个简单的作业管理来并行处理多个命令.也就是说,我有一个很大的命令列表要运行,我想在任何给定的时间运行其中两个.

我对bash有很多了解,所以这里有一些要求让它变得棘手:

  • 命令具有可变的运行时间,所以我不能只生成2,等待,然后继续下两个.一旦完成一个命令,就必须运行下一个命令.
  • 控制过程需要知道每个命令的退出代码,以便它可以保持总共失败的数量

我在想我可以使用trap但我没有看到一个简单的方法来获取处理程序中的子项的退出值.

那么,关于如何做到这一点的任何想法?


好吧,这里有一些概念代码可能有用,但它打破了bash:无效的命令行生成,挂起,有时是核心转储.

# need monitor mode for trap CHLD to work
set -m
# store the PIDs of the children being watched
declare -a child_pids

function child_done
{
    echo "Child $1 result = $2"
}

function check_pid
{
    # check if running
    kill -s 0 $1
    if [ $? == 0 ]; then
        child_pids=("${child_pids[@]}" "$1")
    else
        wait $1
        ret=$?
        child_done $1 $ret
    fi
}

# check by copying pids, clearing list and then …
Run Code Online (Sandbox Code Playgroud)

bash

18
推荐指数
2
解决办法
2万
查看次数

标签 统计

bash ×1