在 Shell 脚本中,你可以使用以下几种方式来并发执行多个进程:
1. 使用 &
符号
在命令结尾添加 &
符号,可以将命令放到后台运行,从而实现并发执行。例如:
#!/bin/bash
command1 &
command2 &
command3 &
...
以上脚本中的每一个命令都会在后台并发启动。
2. 限制并发数
若要控制并发进程的数量,可以使用 xargs
或 parallel
工具,或者自己编写循环并结合 wait
命令来实现。
例如,使用 xargs
并限制并发数为 N
:
ls *.sh | xargs -P N -I {
} bash {
}
其中 -P
参数指定了最大并发数,-I {}
指定占位符,bash {}
表示执行每一个找到的 .sh
文件。
3. 使用 GNU Parallel
GNU Parallel 是一个强大的工具,专门设计用于轻松地实现 shell 命令的并行执行,同时支持限制并发数量。
parallel -j N ::: 'command1 arg1' 'command2 arg2' 'command3 arg3'
这里的 -j N
表示同时运行的最大作业数。
4. 自己编写控制并发的循环
当不使用外部工具时,可以通过循环和计数器来手动控制并发进程:
#!/bin/bash
max_processes=5
count=0
for cmd in $(cat commands.txt); do
if [ "$count" -lt "$max_processes" ]; then
eval "$cmd" &
((count++))
else
wait -n || true # 等待任意一个子进程完成并继续下一个
((count--))
fi
done
# 确保没有遗留的后台进程
wait
在这个例子中,脚本读取 commands.txt
文件中的每一条命令,并且只在活跃进程数少于设定的最大进程数时才启动新进程。wait -n
用于等待第一个完成的子进程,而 || true
是为了防止非零退出码导致脚本意外终止。
通过上述方法,您可以灵活地在 Shell 脚本中控制并发执行多个进程,以达到优化性能或资源利用率的目的。