我正在运行openssl dhparam -out dhparam4096.pem 4096
,它在任务期间将单个内核固定在 100%(这在某些处理器上可能相当可观)。我有 1 个或多个基本上处于空闲状态的额外核心,我想使用它们。
我想运行$(nproc)
该命令的 × 个实例。不同之处在于,我不需要完成所有实例——只需要第一个退出的实例……一旦“获胜者”实例完成,0
其余进程就应该被“d”或类似,它不需要优雅。SIGTERM
我正在学习parallel
并xargs
为实现这一目标,有许多用于完成所有并行任务的操作方法文章,但我在搜索引擎 fu 上没有达到上述目标。我不喜欢使用parallel
or的想法,一旦我找到了使用它的方法,我的阅读列表中xargs
就有了并行替代页面。
我如何运行$(nproc)
× 个命令实例,其中第一个退出的实例0
将杀死其他实例?
其他信息:Debian 11、aarch64 bash
、.
在交互式 shell 的提示下
zsh
:将在新的进程组中运行该子 shell,
your-command
成功退出的第一个实例会触发一个kill 0
杀死该进程组的 subshell。parallel
你可以用from做同样的事情moreutils
:(
{1..5}
,来自 zsh,现在许多其他 shell 甚至 bash 都支持,但在 bash 中你不能在那里使用扩展,你总是可以用$(seq "$(nproc)")
那里替换假设一个未修改的$IFS
)。或者使用 GNU
xargs
:或者明确地将每个作业绑定到每个 CPU:
每次的关键是在交互式 shell 的提示符下运行它,以便所有命令都放在它们自己的进程组中。