Make の並列処理は、シェル スクリプトを作成する場合に特に便利です。ホストのセット全体の「稼働時間」を取得したい (または基本的に遅い操作を実行したい) とします。あなたはループでそれを行うことができます:
cat hosts | while read host; do echo "$host: $(ssh $host uptime)"; done
これは機能しますが、遅いです。サブシェルを生成することでこれを並列化できます。
cat hosts | while read host; do (echo "$host: $(ssh $host uptime)")&; done
しかし、今では生成するスレッドの数を制御できCTRL-Cず、すべてのスレッドをきれいに中断することはできません。
Make ソリューションは次のとおりです。これをファイル (例: showuptimes
) に保存し、実行可能としてマークします。
#!/usr/bin/make -f
hosts:=$(shell cat)
all: ${hosts}
${hosts} %:
@echo "$@: `ssh $@ uptime`"
.PHONY: ${hosts} all
今実行cat hosts | ./showuptimes
すると、稼働時間が1つずつ出力されます。cat hosts | ./showuptimes -j
それらをすべて並行して実行します。呼び出し元は、並列化の度合いを直接制御する-j
か ( )、システム負荷によって間接的に指定できます ( -l
)。