make
大規模なプロジェクトでは、シェルでコマンドを実行するときにコマンドを入力してCtrlZプロセスを停止し、シェルに戻ることができます。その後、実行して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
)、まだ出力を吹き出し、コア温度を上げていました!停止するCtrlZこの問題は発生したことはありませんが、スクリプトでこれを行う方法がわかりません。
CtrlZとどう違うのkill -STOP
?シェルスクリプトで前者の動作をどのように取得できますか?
ベストアンサー1
Ctrl-ZはCtrl-Zとどのように異なり、
kill -STOP
シェルスクリプトでCtrl-Zの動作をどのように取得できますか?
CTRL-Z
SIGTSTPは通常送信され(ブロックされる可能性があります)、この場合、シェルはしばしばttyを以前に保存された状態にリセットします。ただし、さらに重要なのは、制御端末プロセスグループがシェルのPIDに設定され、再び回復を使用するジョブのPIDに設定されることですfg
。
元の質問に戻ります。温度に応じた周波数スケーリングを使用してください。CPU周波数実際に釘を打つのに良いハンマーかもしれません。