최근 수정 시각 : 2024-10-20 22:46:16

응답 없음

ANR에서 넘어옴

1. 개요2. 원인3. 해결법4. 기타5. 관련 문서

1. 개요

파일:OhYnLZq.png
Not Responding
응답 없음

Microsoft Windows에서 프로그램과 프로그램 간에 충돌 오류가 일어나 이를 운영 체제에서 독자적으로 해결할 때까지 프로그램 작동을 멈추는 현상. Windows 9x 커널에서 유난히 자주 발생하는 블루스크린과는 달리 Windows NT 커널에서도 자주 볼 수 있는 현상이다. 사진의 예시는 파일 탐색기. Windows Vista부터는 이 응답 없음이 뜰 때에는 갑자기 화면이 살짝 뿌옇게 된다.

리소스모니터에서 일시중단을 한다음 프로그램으로 돌아가면 응답없음으로 빠지고, 이후로는 리소스모니터에서 다시 시작을 할 수가 없다. 일시중단을 해놓고서 습관적으로 프로그램으로 돌아가는 행위를 조심해야 한다.

2. 원인

윈도우에서 마우스클릭하거나 키보드의 키를 누르는 등[1]의 행동은 전부 메시지라고 하여 운영 체제(OS)가 먼저 1차적으로 받고 각 프로그램에게 해야 할 역할을 하달한다. 프로그램들은 각각 자기만의 메시지 큐(쉽게 이야기하면 그냥 받은 메시지 즉 해야 할 일을 담는 상자)를 가지고 있는데 프로그램은 매번 루프를 돌면서[2] 이 메시지 큐에 메시지가 있으면 해당 메시지를 큐에서 꺼내 그에 알맞은 무언가를 하게 된다.

이것을 프로그램의 '응답'이라고 하며 이렇게 운영 체제(OS)와 프로그램 간에 서로 대화를 하는 느낌으로 사용자 시스템이 돌아가는데 가끔가다 이 프로그램이 자기의 작업을 처리하다가 무한 루프에 걸려 버린다던가 아니면 너무 시간이 오래 걸리는 작업을 한다던가 등의 이유로 이 메시지 큐에 있는 메시지들을 제때제때 처리하지 못할 경우 운영 체제(OS)에서는 '응답'이 없고 무한루프는 무한정으로 돌고 있으니 문제가 있다고 판정하고 이 프로그램이 정상화되어 쌓인 메시지들을 처리할 때까지 무한정 기다리게 되고 이것이 곧 응답 없음 상태라고 말하는 그것이다.

이것이 서로 동등한 관계의 프로세스에게 발생할 경우 데드락이라고 해서 다른 루틴에서의 개입 없이는 영원히 서로가 서로를 기다리게 되는 상황이 되어버리지만 이 상황에서는 프로그램 하나만 렉이라던지 무한루프에서 못 벗어나는 등 문제가 생긴 것이고 운영 체제(OS)와 일개 프로그램의 사이에는 엄청난 프로그램들이 존재하고 있으므로 운영 체제(OS)는 이 프로그램에게 그냥 (응답 없음) 딱지를 붙이고 다른 일을 하러 가게 된다. 유저는 그렇게 아무런 반응 없이 하얗게 질려버린 프로그램을 보게 되는 것.

만약 일개 프로그램이 아니라 커널 내에서 이러한 무한 루프나 데드락이 발생할 경우 단지 응답 없음 정도로 끝나지 않고 블루스크린을 동반해버린다.

3. 해결법

기다린다. (원래 작업시간이 길다면) or 강제 종료하고 다시 켠다. (무한 루프에 걸린 경우)

원인부터가 말 그대로 프로그램이 뭔가 다른 일을 하느라 미처 운영 체제(OS)의 메시지를 처리하지 못한 것이기 때문에 만일 그것이 시간이 많이 걸리는 작업[3]일 경우 어느 정도의 시간을 기다려 주자. 프로그램은 자기가 할 일을 다 끝내고 다시 메시지를 처리할 것이고 그러면 '응답 없음' 상태에서 자연스럽게 탈출하게 되며 가장 이상적인 해결법.

하지만 논리 오류 등 다른 이유에 의해서 프로그램이 내부적으로 꼬여 있을 경우에는 아무리 오래 기다려도 더이상 작업이 진행되지 않는다. 이 경우는 정말로 강제 종료밖에 답이 없으므로 오래 공들인 작업물이 모두 날아가 버리는 등의 원치 않는 대참사를 막기 위해 문서 작성 등을 할 때는 자주 저장을 하는 습관을 들이자.

4. 기타

파일:1328372937.jpg
답 없음
그래픽 작업을 하는 사람들이 제일 싫어하고 무서워하는 것이다. 그 이유는 단순한 문서 작업에 비해 그래픽 작업은 GPU에 부하가 많이 걸리고 CPU도 많이 잡아먹어 컴퓨터의 자원을 많이 소모하기 때문에 그만큼 응답 없음 상태에 빠지기 쉽기 때문이다.

과거 응답 없음이 걸린 응용 프로그램을 빠르게 강제 종료하는 방법이라며 레지스트리의 AutoEndTasks, HungAppTimeout, WaitToKillAppTimeout, WaitToKillServiceTimeout 값을 수정하는 팁이 있었는데(윈도우 종료시 종료되지 않고 상주하는 앱을 강제 종료하는 레지스트리 / 이곳에서 언급하는 프로그램 응답중지와는 상관이 없는 기능이다.), 이 방법은 어지간하면 사용하지 않는 것을 권장한다. 이 팁은 Windows가 응답 없음으로 인식하는 임계값을 낮춰서 강제 종료 속도를 빠르게 하는 것인데, 컴퓨터가 느리거나 프로그램이 발적화(혹은 원래부터 무거운 작업)인 경우 이 임계값에 쉽게 걸려서 쉽게 튕기는 일이 발생한다. 그나마 포그라운드 프로세서의 경우 응답 없음이라고 표시라도 되므로 그냥 침착하게 기다리면 되지만, 백그라운드 프로세서는 응답 없음이라고 표시조차 안 돼서 무조건 강제로 튕기게 되며, 결국 시스템이 전체적으로 불안정해지는 문제가 생긴다. 컴퓨터를 종료할 때마다 '지금 끝내기'가 뜨는 경우라 해도 문제가 있는 프로그램을 찾아내서 해결하는 것이 이로우며, 강제 종료 임계값을 수정하는 것은 근본적인 문제를 해결하기도 힘들고 포맷도 여의치 않은 등의 상황에서 최후의 수단(last resort)으로만 사용해야 한다.[4]

발전형으로 커널에 응답 없음이 발생해서 뜨는 것이 블루스크린이다.[5] 더 자세한 내용은 블루스크린 문서를 참조.

5. 관련 문서


[1] 마우스가 이동하거나 프로그램이 종료되는 것은 물론이고 모니터에 자신을 그려야 된다거나(WM_PAINT) 심지어 특정한 상황(타이머)에서는 가만히 있어도 알아서 메시지가 생긴다.[2] 무한 루프의 쓰임새 중 하나로 이 무한 루프가 없으면 모든 프로그램(OS 포함)이 시작하자마자 바로 지 할 일만 다 하고 광속으로 종료된다. 다시 말해 무한 루프가 없으면 당신의 우분투윈도우는 켜자마자 꺼질 것이다. 간단히 설명하면 이 무한 루프는 자신의 일을 다 끝냈는지에 대한 체크와도 같은 기능으로 이 무한 루프가 계속 돌고 있고 응답 없음이 백지화 상태로 됐다면 자가 점검에서 일이 끝나지 않았다는 신호를 보내는 것.[3]테라바이트 짜리 파일을 통으로 컴퓨터 고문 저장한다던지 아니면 네트워크에서 데이터를 받는 중이라던지 등등... 물론 이런 작업은 일반적으로 스레드를 따로 생성하여 처리한다.[4] 앞서 설명한 것같이 프로그램이 수행중인 연산이 많아서 잠시 응답 없음인데도 강제로 꺼져버리기 때문에 평소에 1~2초 정도의 짧은 응답 없음을 자주 겪는다면 이 방법은 피하는게 좋다. 예시로 알림이 올 때마다 살짝씩 멈추는 PC 카카오톡 특성상 이 방법을 썼다가는 하루에 수십번씩 튕기는걸 볼 수 있다.[5] 다만 커널 패닉블루스크린을 뜨게 하는 원인 중 하나이며, 다른 원인으로도 발생 할 수 있다.