【发布时间】:2016-11-29 20:27:47
【问题描述】:
我想要实现的是这样的:
#!/bin/sh
concurrency_limit 3
#takes 5 min
(/usr/bin/my-process-1 --args1 && /usr/bin/my-process-2 --args1) &
#takes 10 min
(/usr/bin/my-process-1 --args2 && /usr/bin/my-process-2 --args2) &
#takes 15 min
(/usr/bin/my-process-1 --args3 && /usr/bin/my-process-2 --args3) &
#takes 5 min
(/usr/bin/my-process-1 --args4 && /usr/bin/my-process-2 --args4) &
#takes 10 min
(/usr/bin/my-process-1 --args5 && /usr/bin/my-process-2 --args5) &
#takes 20 min
(/usr/bin/my-process-1 --args6 && /usr/bin/my-process-2 --args6) &
wait max_limit 1200
echo all processes complete
总体预期的最大执行时间为 20 分钟(-+ 1 分钟),假设我有 3 个 cpu 内核可用,并且我不想同时运行超过 3 个进程。
在脚本开始时,前 3 个进程启动。
5 分钟后:第一个过程完成,第四个过程开始。
第 10 分钟:第 2 和第 4 道工序完成,第 5 道工序开始。
第 15 分钟:第三个过程完成。
第 20 分钟:第 5 个过程完成。第 6 个进程在没有进一步等待的情况下被杀死。
我对stackoverflow做了很多研究,但找不到类似的用例:
https://www.codeword.xyz/2015/09/02/three-ways-to-script-processes-in-parallel/
http://www.gnu.org/software/parallel/
任何帮助或评论将不胜感激。
【问题讨论】:
标签: linux bash concurrency parallel-processing gnu-parallel