📜  并在 bash (1)

📅  最后修改于: 2023-12-03 15:39:27.782000             🧑  作者: Mango

并在 Bash

在 Bash 编程中,我们经常需要同时执行多个命令。这时候就需要使用到并发执行的技术,也就是并行(Parallel)执行。

& 操作符

Bash 中的 & 操作符可以将一个命令放到后台执行,从而实现并发执行的效果。下面是一个简单的示例:

# 脚本文件:parallel.sh
#!/bin/bash

echo "Starting task 1"
sleep 2
echo "Task 1 completed"

echo "Starting task 2"
sleep 3
echo "Task 2 completed"

我们可以使用 & 操作符使得任务 1 和任务 2 并发执行:

./parallel.sh & ./parallel.sh &

使用 & 操作符可以让脚本中的多个命令并行执行。注意,如果你希望在当前 shell 窗口中执行 & 命令,需要使用 nohup 命令:

nohup ./parallel.sh &>/dev/null &
xargs 命令

除了 & 操作符外,我们还可以使用 xargs 命令实现并行执行。xargs 命令可以从标准输入中读取数据,并将其作为参数传递给指定的命令。下面是一个示例:

# 执行 10 次 echo 命令
seq 10 | xargs -P 3 -I {} echo "Task {} started"; sleep 1; echo "Task {} completed"

在上面的示例中,我们使用 seq 10 生成 10 个自然数,然后将它们传递给 echo 命令。xargs 命令的 -P 参数表示并发执行的任务数,这里我们指定为 3。

GNU Parallel

除了原生的并行执行方式外,我们还可以使用 GNU Parallel 工具。它是一个强大的并行执行工具,可以让我们轻松地在多个 CPU 核心上执行任务。同时,它还提供了很多高级特性,例如远程执行任务、负载均衡等。

下面是一个简单的示例:

# 执行 4 次 echo 命令
seq 4 | parallel --progress echo "Task {} started"; sleep 1; echo "Task {} completed"

在上面的示例中,我们使用 seq 4 生成 4 个自然数,然后使用 parallel 命令并发执行 echo 命令。

总结

在 Bash 编程中,我们经常需要并行执行多个任务。可以使用 & 操作符、xargs 命令或 GNU Parallel 工具实现并行执行的效果。具体使用哪种方式取决于场景和需要。同时,注意并行执行时的线程安全性和数据共享问题,避免出现脏数据和死锁等情况。