콘솔에서 while 루프를 종료합니다.

콘솔에서 while 루프를 종료합니다.

나는 명령을 실행했습니다 :

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

Linux 콘솔/터미널에서 이제 이 while 루프가 계속 실행됩니다.

여기에 두 가지 질문이 있습니다.

  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를 전달하는 것과 같습니다. 이 신호의 기본 동작은 작업을 중지하는 것입니다. 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

관련 정보