今回は、別の処理で書きだしたコード一覧ファイルを読み込み
それを複数個まとめて実行するという処理を作成するとします。
command_list.txt
java -jar /usr/bin/compiler.jar --js=test1.js --js_output_file=test1.min.js
java -jar /usr/bin/compiler.jar --js=test2.js --js_output_file=test2.min.js
java -jar /usr/bin/compiler.jar --js=test3.js --js_output_file=test3.min.js
java -jar /usr/bin/compiler.jar --js=test4.js --js_output_file=test4.min.js
java -jar /usr/bin/compiler.jar --js=test5.js --js_output_file=test5.min.js
java -jar /usr/bin/compiler.jar --js=test6.js --js_output_file=test6.min.js
java -jar /usr/bin/compiler.jar --js=test7.js --js_output_file=test7.min.js
java -jar /usr/bin/compiler.jar --js=test8.js --js_output_file=test8.min.js
まずコマンド一覧ファイルには、googleのcompilerコマンドを8回分書いてます。
※極端な例ですので、内容は気にしないでください。
通常8回も実行すると、結構な時間が掛かってしまうので
もう少しだけ早くしたいですよね。。
各コマンドの後ろに「&」を付けて
バックグラウンドで実行する方法を使って
4個同時×2回で処理を行う様にしたいと思います。
multi.sh
echo "マルチスレッド開始";
OUTPUT_FILE="command_list.txt"
n=3;
i=0
while read line
do
# バックグラウンド
eval ${line} &
# 直前のPIDを取得
pid[${i}]=$!
#3以上になったら、0
i=`expr $i \+ 1`;
if [ ${n} -eq ${i} ];then
wait;
i=0;
fi
done < ${OUTPUT_FILE}
echo "マルチスレッド終了";
以上です。
今後は更に、プログレスバーとか出して進捗が見れればなとか思ってますが
※もっとこうすればいいよとかあれば教えて下さい><