在控制台上退出 while 循环

在控制台上退出 while 循环

我运行了一个命令:

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

在 Linux 控制台/终端上,现在这个 while 循环正在连续运行。

我在这里有两个问题:

  1. 如何跳出这个while循环呢?
  2. 如果我与 Linux 的 PuTTY 会话断开连接,我如何返回并找到该循环并终止它?

答案1

您可以使用以下命令取消循环:CTRL+C

当你的 putty 会话关闭时,你的会话就会结束,因此循环将不再运行

  • 除非它运行在屏幕会话或类似的情况,在这种情况下,您必须使用该特定程序的方法重新附加它。

答案2

有时按 control-c 不起作用:循环体得到 control-c 并且循环不断迭代。 (虽然我现在无法使用sleep 1循环条件或主体来重现这种行为,但我记得看到过它。)

control-z 可以停止此操作,并且循环不会在之后恢复,fg除非循环位于像 之类的子 shell 内(while true;do : ;done)。 (在bashGNU/Linux 上)。

fg或者,如果您希望当前正在运行的循环迭代干净地完成,但不开始另一个迭代,则 control-z /很有用。

(Control-z 停止作业,让内核传递 SIGTSTP,就像在非原始模式的 TTY 上 control-c 传递 SIGINT 一样。此信号的默认操作是停止作业。 fg并且bg是作业控制命令,请参阅它们和命令的 bash 内置“帮助” jobs。)

答案3

鉴于 @PeterCordes 正确指出的,Ctrl-C 并不总是有效,我有时使用的解决方案是避免使循环无限。相反,我经常写:

while sleep 1; do ...; done

如果一秒的延迟导致速度过慢,例如当您想要尽快循环时,则以while信号量文件的存在为条件来调节循环:

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

当您需要终止循环时,请转到另一个终端会话并删除文件:

rm /tmp/ENABLE-LOOP-FILE

相关内容