让我们假设总共有10个子进程,我希望我的Shell脚本可以运行。为简单起见,子流程(即在Shell脚本中创建的流程)称为x1 ... 10。一个普通的shell脚本将有10行。假设每行都调用./xi。但是,为了最大限度地提高效率,我知道我的硬件允许同时启动两个子流程。因此,在任何时间点,这些进程中的两个都应运行。一旦完成,就启动下一个。它们的完成顺序不应该假设顺序,任何顺序都可以,因为它们被认为是独立的。在shell脚本中是否有一种优雅的方法?注意,每个x1 ... x10应该只运行一次。
答案 0 :(得分:2)
seq 10 | xargs -P2 -I{} ./xi
seq 10
-输出10个数字。我们不在乎它们。xargs
为每个输入运行命令
-P2
一次运行两个进程。-I{}
替换输入行中命令中的每个{}
。因此,只需丢弃输入即可。./x{}
对输入中的每一行运行此命令。最终答案:cat myshellscript.sh | xargs -L 1 -I CMD -P 2 bash -c CMD
myshellscript.sh
是这样的文件:
./task-jsuqh
./task-siuww
./task-uqywh
./task-sdqaw