나는 명령을 실행했습니다 :
while true ; do ..... ....... ; done
Linux 콘솔/터미널에서 이제 이 while 루프가 계속 실행됩니다.
여기에 두 가지 질문이 있습니다.
- 이 순환에서 벗어나는 방법은 무엇입니까
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