私はコマンドを実行しました:
while true ; do ..... ....... ; done
Linuxコンソール/ターミナルでは、このwhileループは引き続き実行されます。
ここに2つの質問があります。
- この循環から抜け出す方法は何ですか
while
? - Linux PuTTYセッションが切断された場合、どのように戻ってループを見つけて終了しますか?
答え1
以下を使用してループをキャンセルできます。CTRL+C
パテセッションが閉じるとセッションが終了するため、ループは実行されなくなります。
- 引き続き実行されていない限り画面セッションなどの場合は、特定のプログラムの方法を使用して再接続する必要があります。
答え2
時にはCtrl-Cを押しても機能しません。ループ本体がControl-Cを取得し、ループが繰り返されます。 (今はループ条件やボディを使ってこの動作を再現することはできませんが、このsleep 1
記憶があります。)
control-zはこれを停止し、ループがfg
。(while true;do : ;done)
(bash
GNU / Linuxで)。
fg
あるいは、現在実行中のループ反復をきちんと終了し、他の反復を開始したくない場合は、control-z /が便利です。
(control-zがジョブを停止し、カーネルがSIGTSTPを通過するようにします。control-cがネイティブモードではなくTTYからSIGINTを渡すのと同じです。この信号のデフォルトの動作はジョブを停止すること ですfg
。bg
制御コマンドです。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