コンソールでwhileループを終了します。

コンソールでwhileループを終了します。

私はコマンドを実行しました:

while true ; do ..... ....... ; done

Linuxコンソール/ターミナルでは、このwhileループは引き続き実行されます。

ここに2つの質問があります。

  1. この循環から抜け出す方法は何ですかwhile
  2. Linux PuTTYセッションが切断された場合、どのように戻ってループを見つけて終了しますか?

答え1

以下を使用してループをキャンセルできます。CTRL+C

パテセッションが閉じるとセッションが終了するため、ループは実行されなくなります。

  • 引き続き実行されていない限り画面セッションなどの場合は、特定のプログラムの方法を使用して再接続する必要があります。

答え2

時にはCtrl-Cを押しても機能しません。ループ本体がControl-Cを取得し、ループが繰り返されます。 (今はループ条件やボディを使ってこの動作を再現することはできませんが、このsleep 1記憶があります。)

control-zはこれを停止し、ループがfg(while true;do : ;done)bashGNU / Linuxで)。

fgあるいは、現在実行中のループ反復をきちんと終了し、他の反復を開始したくない場合は、control-z /が便利です。

(control-zがジョブを停止し、カーネルがSIGTSTPを通過するようにします。control-cがネイティブモードではなくTTYからSIGINTを渡すのと同じです。この信号のデフォルトの動作はジョブを停止すること ですfgbg制御コマンドです。bashを参照してくださいjobs

答え3

@PeterCordesがCtrl-Cが常に機能していないことを正しく指摘したことを考えると、私が時々使用する解決策はループを無限にするのを避けることです。代わりに、私はしばしば次のように書いています。

while sleep 1; do ...; done

できるだけ早くループを実行したい場合など、1秒遅れで速度が遅すぎる場合は、whileセマフォファイルが存在するかどうかに応じてループ条件を設定してください。

touch /tmp/ENABLE-LOOP-FILE
while [ -f '/tmp/ENABLE-LOOP-FILE' ]; do ...; done

ループを終了する必要がある場合は、別のターミナルセッションに移動してファイルを削除します。

rm /tmp/ENABLE-LOOP-FILE

関連情報