Shell 运行 的脚本一次处理两个子进程
Shell script for running subprocesses two at a time
让我们假设总共有 10 个子进程,我希望我的 shell 脚本到 运行。为简单起见,子流程(即在 shell 脚本中创建的流程)被称为 x1...10。一个普通的 shell 脚本会有 10 行;让我们假设每一行调用./xi。但是,为了最大限度地提高效率,我知道我的硬件允许同时启动两个子进程。因此,在任何时间点,这些进程中的两个应该 运行ning。一个完成的那一刻,下一个启动。不应假定它们如何完成的顺序,任何顺序都可以,因为它们被假定为独立的。在 shell 脚本中是否有一种优雅的方式来做到这一点?请注意,每个 x1...x10 应该 运行 一次。
seq 10 | xargs -P2 -I{} ./xi
seq 10
- 输出 10 个数字。我们不关心他们。
xargs
运行 每个输入一个命令
-P2
运行s 一次两个进程。
-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
让我们假设总共有 10 个子进程,我希望我的 shell 脚本到 运行。为简单起见,子流程(即在 shell 脚本中创建的流程)被称为 x1...10。一个普通的 shell 脚本会有 10 行;让我们假设每一行调用./xi。但是,为了最大限度地提高效率,我知道我的硬件允许同时启动两个子进程。因此,在任何时间点,这些进程中的两个应该 运行ning。一个完成的那一刻,下一个启动。不应假定它们如何完成的顺序,任何顺序都可以,因为它们被假定为独立的。在 shell 脚本中是否有一种优雅的方式来做到这一点?请注意,每个 x1...x10 应该 运行 一次。
seq 10 | xargs -P2 -I{} ./xi
seq 10
- 输出 10 个数字。我们不关心他们。xargs
运行 每个输入一个命令-P2
运行s 一次两个进程。-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