我在目录上有一堆PNG图片。我有一个名为pngout的应用程序,可以运行它来压缩这些图像。该应用程序由我执行的脚本调用。问题在于此脚本一次执行一个,如下所示:
FILES=(./*.png)
for f in "${FILES[@]}"
do
echo "Processing $f file..."
# take action on each file. $f store current file name
./pngout -s0 $f R${f/\.\//}
done
一次只处理一个文件,需要很多时间。运行此应用程序后,我看到CPU仅为10%。因此,我发现可以将这些文件分为4个批次,将每个批次放入一个目录中,并从4个终端窗口,4个进程中触发4个,因此我同时拥有4个脚本实例,同时处理这些图像和工作需要1/4的时间。
第二个问题是我浪费了时间分割图像和批处理并将脚本复制到四个目录,打开4个终端窗口,等等。
如何用一个脚本执行而无需划分任何内容?
我的意思是两件事:首先,我如何从bash脚本中向后台启动进程?(只需添加&到末尾?)第二:在发送第四个任务后如何停止将任务发送到后台,并让脚本等待任务结束?我的意思是说,只是在一个任务结束时将一个新任务发送到后台,同时始终保持4个任务并行?如果我不这样做,则循环会将大量任务发送到后台,并且CPU会阻塞。