最近有个需求是并发执行某个程序且对最大并发数量有要求
本来想用编程语言来实现,后面发现 bash 甚至也可以,利用了 Linux 的命名管道的特性
以下代码是在允许最多 8 个进程并发的限制下执行程序 100 次的 bash 脚本,解释见注释
本来想用编程语言来实现,后面发现 bash 甚至也可以,利用了 Linux 的命名管道的特性
以下代码是在允许最多 8 个进程并发的限制下执行程序 100 次的 bash 脚本,解释见注释
#!/bin/bash
thread=8
loop=100
mkfifo tmp # create temp named pipe
exec 5<>tmp # link fd with named pipe
# -> s = semaphore($thread)
for i in `seq $thread`; do
echo
done >&5
for i in `seq $loop`; do
read -u5 # s.acquire()
{
# execute command here
echo >&5 # s.release()
} &
done
wait
rm -rf tmp
Edit: 由群友推荐同样可以实现此功能的有 GNU parallel、xargs,也可手工使用 & 和 wait 维护