并行运行bash命令,跟踪结果和计数
发布时间:2020-12-15 19:16:51 所属栏目:安全 来源:网络整理
导读:我想知道如果可能,我可以在BASH中创建一个简单的作业管理来并行处理多个命令。也就是说,我有一大堆命令来运行,我希望有两个可以在任何时间运行。 我非常了解bash,所以这里的要求使它变得棘手: 命令具有可变的运行时间,所以我不能只生成2,等待,然后继
我想知道如果可能,我可以在BASH中创建一个简单的作业管理来并行处理多个命令。也就是说,我有一大堆命令来运行,我希望有两个可以在任何时间运行。
我非常了解bash,所以这里的要求使它变得棘手: >命令具有可变的运行时间,所以我不能只生成2,等待,然后继续下两个。一旦完成一个命令,就必须运行下一个命令。 我在想,我可以使用陷阱,但我没有看到一个简单的方法来获取处理程序中的孩子的退出值。 那么,关于如何做到这一点的任何想法呢? 那么这里有一些概念代码证明应该可以工作,但是它会破坏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 checking each,check_pid # will add back to the list if it is still running function check_done { to_check=("${child_pids[@]}") child_pids=() for ((i=0;$i<${#to_check};i++)); do check_pid ${to_check[$i]} done } function run_command { "$@" & pid=$! # check this pid now (this will add to the child_pids list if still running) check_pid $pid } # run check on all pids anytime some child exits trap 'check_done' CHLD # test for ((tl=0;tl<10;tl++)); do run_command bash -c "echo FAIL; sleep 1; exit 1;" run_command bash -c "echo OKAY;" done # wait for all children to be done wait 请注意,这不是我最终想要的,而是要获得我想要的基础。 跟进:我已经在Python中实现了一个系统。所以任何使用Python进行脚本编写的人都可以拥有上述功能。参见shelljob
GNU Parallel是awesomesauce:
$ parallel -j2 < commands.txt $ echo $? 它将退出状态设置为失败的命令数。如果你有超过253个命令,请查看–joblog。如果您不知道所有的命令,请查看–bg。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angularjs – 如何从左到右滑动离子列表项?
- Scala中对的惯用扁平化
- scala – java.lang.ClassNotFoundException:org.apache.s
- 基于Bootstrap的UI扩展 StyleBootstrap
- WinCe+WebService
- 使用cxf生成webservice客户端调用异常解决
- Cmake:如何在文件更新时运行bash命令?
- 我们可以在angularJS app.js中一起使用ngRoute和ui.router吗
- angularjs – 将状态类应用于ui-view以允许不同的动画
- AngularJS中是否可以在经典的javascript函数中使用数据绑定