【问题标题】:How to run shell commands in parallel without background processes?如何在没有后台进程的情况下并行运行 shell 命令?
【发布时间】:2013-07-07 08:42:40
【问题描述】:

我正在尝试以并行方式运行多个 shell 命令,而不使用“&”创建后台进程。 另外,我想将一项工作分配给一个 CPU(以公平的方式) 例如,如果我有四个核心, 我想将四个 cmd1 分配给 cmd4,如下所示:

CPU #1:cmd1

CPU #2:cmd2

CPU #3:cmd3

CPU #4:cmd4

您能告诉我这样做的方法吗?

我找到了“并行”命令,但我不知道如何使用它。 另外,我尝试了以下命令: ./cmd1 | ./cmd2 | ./cmd3 | ./cmd4 似乎四个命令(cmd1 到 cmd4)并行运行,但我不确定这些作业是否已分配给我在上面所说的核心。

谢谢!

对不起。我在 linux 上运行命令。

【问题讨论】:

  • 你为什么关心命令分配给哪个核心?
  • 很抱歉让您感到困惑。我只想将一项工作分配给一个核心。 (无需将工作分配给特定核心)

标签: linux shell parallel-processing cpu core


【解决方案1】:

首先,如果您希望进程并行执行,它们必须是后台作业。你有什么反对使用&

其次,您可以使用taskset 将进程绑定到一个 CPU 内核或一组内核。例如:

taskset -c 0 cmd1 &
taskset -c 1 cmd2 &
taskset -c 2 cmd3 &
taskset -c 3 cmd4 &

不过,这可能不是一个好主意;如果一个进程长时间处于空闲状态,那么另外 3 个进程将无法使用它分配的核心。

【讨论】:

  • 命令“./cmd1 | ./cmd2 | ./cmd3 | ./cmd4”是否将所有命令(cmd1 到 cmd4)作为后台进程?
  • 除了最后一个。 cmd4 停留在前台,其标准输出打印到终端。
猜你喜欢
  • 1970-01-01
  • 2011-02-25
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多