make
シェルから(大規模なプロジェクトで)コマンドを実行すると、Ctrl-Zを入力してプロセスを停止し、シェルに戻ることができます。その後、fg
プロセスを続行するために実行できます。
これを自動化するシェルスクリプトを作成しようとしています(具体的には、CPUの温度を数秒ごとに確認し、コンピューターが過熱しやすいため、高温になった場合はプロセスを停止します)。私の最初の試みは次のように機能しました(簡略化)。
make &
subpid="$!"
sleep 2
# If the CPU temperature is too high...
kill -STOP "$subpid"
sleep 2
# If the CPU temperature has dropped to safe levels...
kill -CONT "$subpid"
wait "$subpid"
残念ながら、これは機能しませんでした。プロセスにSIGSTOPを送信しても、プロセスは一時停止しませんでした(出力を端末に送信し続けることで明らかになりました)。make &
コマンドラインで実行し、SIGSTOPを送信し、プロセスの状態をps
;で確認しました。停止としてリストされていました(そしてSIGCONTを送信したときに再び開始しました)が、出力を吐き出し、コア温度を上昇させていました!Ctrl-Zで停止してもこの問題は発生しませんでしたが、スクリプトでそれを行う方法はわかりません。
Ctrl-Zとの違いは何kill -STOP
ですか?シェルスクリプトで前者の動作を取得するにはどうすればよいですか?
make
再帰的に実行されています。実際、私はそれがいくつかのレベルに深くなると思います。