尝试同时运行多个进程:
#!/usr/bin/env bash
read -r -p "Enter number of sessions: " pro_count
read -r -p "directory of files: " d
nodeb_job() {
printf 'Connecting to %s\n' "$i"
cd || exit
if [ ! -d "$d" ]; then
mkdir "$d"/log
fi
foo "$i" "$d"/"$i" > "$d"/log/"$i"
printf 'Done with %s\n' "$i"
}
j=0
for i in $(ls "$d"); do
if (( j++ >= pro_count )); then
wait -n
fi
nodeb_job &
done
wait
它没有用,因为我有一个旧版本的bash。
user@dacc2:~$ bash --version
GNU bash, version 3.2.57(1)-release (i386-pc-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.
我是solaris 10上的用户,没有gnu并行。有什么方法可以做到这一点,同时仍然可以从提示中指定会话数量?
答案 0 :(得分:1)
假设您不介意轮询解决方案,基于计算背景数{... 1}的一种简单/快速肮脏的方法......
jobs
将睡眠时间(本例中为2秒)调整为env中有意义的值。例如,如果j=0
for i in $(ls "$d"); do
while [[ $(jobs | wc -l) -ge ${pro_count} ]]
do
sleep 2
done
nodeb_job &
done
wait
来电预计需要几分钟时间,并且您不是很匆忙,那么您可以执行nodeb_job()
之类的操作。另一方面,如果sleep 30
来电很快和/或您希望快速开始下一份工作,那么nodeb_job()
可能是合适的......?