프로그램이 안 꺼질 때 해결 방법|CMD로 멈춘 프로세스 찾아 강제 종료하는 실전 방법

Windows를 사용하다 보면 프로그램이 갑자기 멈추면서 아무것도 할 수 없는 상황이 발생할 수 있습니다.

창의 닫기 버튼을 눌러도 반응이 없고 프로그램 화면에는 ‘응답 없음’이 표시되기도 합니다.

보통 이런 상황에서는 작업 관리자를 실행해 프로그램을 종료합니다. 하지만 작업 관리자에서 원하는 프로세스를 찾기 어렵거나 프로그램을 종료했는데도 백그라운드 프로세스가 남아 있는 경우가 있습니다.

이럴 때 Windows CMD에서 tasklisttaskkill 명령어를 사용하면 현재 실행 중인 프로세스를 직접 확인하고 원하는 프로세스만 지정해 종료할 수 있습니다.

이번 글에서는 명령어 옵션을 단순하게 나열하는 대신 실제로 프로그램 하나가 멈춰 정상적으로 종료되지 않는 상황을 가정해 문제를 해결해보겠습니다.

프로그램이 멈췄다고 바로 강제 종료하면 안 되는 이유

프로그램이 응답하지 않으면 가장 먼저 강제 종료부터 하고 싶을 수 있습니다.

하지만 강제 종료는 프로그램이 정상적인 종료 절차를 거치지 않고 중단될 수 있기 때문에 저장하지 않은 데이터가 사라질 가능성이 있습니다.

예를 들어 문서 편집 프로그램에서 작업 중이었다면 저장되지 않은 내용이 손실될 수 있습니다.

파일을 복사하거나 데이터를 기록하고 있는 프로그램이라면 작업이 불완전하게 끝날 수도 있습니다.

따라서 기본적인 순서는 다음과 같이 생각하는 것이 좋습니다.

정상 종료 시도 → 프로세스 확인 → 일반 종료 시도 → 필요한 경우 강제 종료

CMD에서도 무조건 /F 옵션부터 사용하는 것이 아니라 어떤 프로세스를 종료할 것인지 정확하게 확인하는 과정이 중요합니다.

1단계: CMD 실행하기

먼저 Windows 검색창에서 다음과 같이 입력합니다.

cmd

명령 프롬프트를 실행합니다.

단순히 프로세스 목록을 확인하는 작업은 일반 CMD에서도 가능하지만, 일부 프로세스를 종료할 때 권한 부족 메시지가 나타날 수 있습니다.

필요한 경우 명령 프롬프트를 관리자 권한으로 실행할 수 있습니다.

다만 관리자 권한에서는 시스템에 영향을 줄 수 있는 작업도 가능하므로 프로세스의 정체를 확인하지 않은 상태에서 종료 명령을 실행해서는 안 됩니다.

2단계: tasklist로 실행 중인 프로세스 확인하기

현재 Windows에서 실행 중인 프로세스를 확인하려면 다음 명령어를 입력합니다.

tasklist

Enter 키를 누르면 현재 실행 중인 프로세스 목록이 나타납니다.

결과에서는 일반적으로 다음과 같은 정보를 확인할 수 있습니다.

이미지 이름

PID

세션 이름

세션 번호

메모리 사용량

여기에서 특히 중요한 것은 이미지 이름과 PID입니다.

이미지 이름은 실행 중인 프로세스의 이름이고 PID는 해당 프로세스를 구분하기 위한 Process ID입니다.

예를 들어 설명을 위해 다음과 같은 결과가 있다고 가정하겠습니다.

notepad.exe 8240 Console 1 18,500 K

여기에서 프로세스 이름은:

notepad.exe

PID는:

8240

입니다.

이제 CMD에서 이 프로세스를 구체적으로 지정할 수 있습니다.

PID는 왜 확인해야 할까?

Windows에서는 같은 프로그램이 여러 개 실행될 수 있습니다.

예를 들어 같은 프로그램의 프로세스가 다음처럼 두 개 존재한다고 가정해보겠습니다.

example.exe 8240

example.exe 9312

프로세스 이름만 보면 둘 다 동일합니다.

하지만 PID는 서로 다릅니다.

따라서 특정 프로세스 하나만 정확하게 지정해야 한다면 PID를 이용하는 것이 유용합니다.

특히 여러 인스턴스가 실행되는 프로그램을 종료할 때 프로세스 이름만 보고 전부 종료하지 않도록 주의해야 합니다.

3단계: 원하는 프로그램만 필터링해서 찾기

tasklist 결과가 너무 길다면 원하는 프로그램을 찾기가 불편할 수 있습니다.

이럴 때 findstr을 함께 사용할 수 있습니다.

예를 들어 메모장 프로세스를 찾는다면 다음과 같이 입력할 수 있습니다.

tasklist | findstr notepad

결과에 notepad.exe가 있다면 관련된 줄만 확인할 수 있습니다.

또 다른 방법은 tasklist의 필터 옵션을 사용하는 것입니다.

tasklist /FI "IMAGENAME eq notepad.exe"

이 명령어는 이미지 이름이 notepad.exe인 프로세스를 찾아 보여줍니다.

PID를 이미 알고 있다면 다음처럼 검색할 수도 있습니다.

tasklist /FI "PID eq 8240"

프로세스가 많을수록 이런 필터 기능이 유용합니다.

4단계: 먼저 프로그램 자체에서 정상 종료를 시도한다

종료하려는 프로세스를 찾았다고 바로 taskkill /F를 실행할 필요는 없습니다.

프로그램 창이 아직 어느 정도 반응한다면 먼저 프로그램 자체의 종료 기능을 사용합니다.

창의 닫기 버튼을 누르거나 프로그램 메뉴에서 종료를 선택할 수 있습니다.

콘솔에서 직접 실행한 프로그램이라면 해당 프로그램의 정상 종료 방법을 사용합니다.

프로그램에 따라 Ctrl + C가 종료 신호로 사용되는 경우도 있습니다.

정상적으로 종료된다면 가장 좋습니다.

문제는 프로그램이 완전히 멈춰 이런 방법이 통하지 않는 경우입니다.

그때 taskkill을 사용할 수 있습니다.

5단계: PID를 이용해 프로세스 종료하기

앞에서 확인한 PID가 8240이라고 가정하겠습니다.

다음 명령어를 실행합니다.

taskkill /PID 8240

여기서 /PID 뒤에는 실제로 자신이 확인한 프로세스 번호를 입력해야 합니다.

정상적으로 종료되었다면 성공 메시지가 나타날 수 있습니다.

그다음 다시:

tasklist /FI "PID eq 8240"

을 실행합니다.

해당 PID의 프로세스가 더 이상 존재하지 않는다면 종료된 것을 확인할 수 있습니다.

이렇게 종료 명령을 실행한 뒤 실제로 종료됐는지 다시 확인하는 과정까지 하는 것이 좋습니다.

6단계: 프로세스 이름으로 종료하는 방법

PID가 아니라 프로세스 이름을 이용할 수도 있습니다.

예를 들어 notepad.exe를 종료하려면 다음과 같이 사용할 수 있습니다.

taskkill /IM notepad.exe

여기에서 /IM은 이미지 이름을 지정할 때 사용합니다.

하지만 이 방법에는 주의할 점이 있습니다.

동일한 이미지 이름의 프로세스가 여러 개 실행 중이라면 의도하지 않은 프로세스까지 영향을 받을 수 있습니다.

따라서 특정 프로세스 하나만 종료해야 하는 상황에서는 PID를 확인하고 종료하는 방식이 더 명확할 수 있습니다.

7단계: 일반 taskkill로 종료되지 않을 때 /F 사용하기

프로그램이 심하게 멈춘 경우 다음 명령어만으로 종료되지 않을 수 있습니다.

taskkill /PID 8240

이때 대상 프로세스가 무엇인지 정확하게 확인했고 강제 종료로 인한 데이터 손실 가능성도 이해했다면 /F 옵션을 검토할 수 있습니다.

taskkill /PID 8240 /F

/F는 강제 종료를 요청하는 옵션입니다.

프로세스 이름을 이용한다면 다음과 같은 형태도 가능합니다.

taskkill /IM notepad.exe /F

하지만 /F는 편리한 만큼 신중하게 사용해야 합니다.

저장되지 않은 데이터가 있다면 손실될 수 있기 때문입니다.

따라서 프로그램이 조금이라도 정상적으로 종료될 가능성이 있다면 정상 종료 방법을 먼저 시도하는 것이 좋습니다.

실제 상황 1: 프로그램 창은 닫혔는데 프로세스가 남아 있다

프로그램 창을 닫았는데 다시 실행하려고 하니 이미 프로그램이 실행 중이라는 메시지가 나타나는 경우가 있습니다.

화면에는 프로그램이 보이지 않지만 백그라운드에 프로세스가 남아 있을 수 있습니다.

먼저:

tasklist

를 실행합니다.

프로그램 이름을 알고 있다면:

tasklist | findstr 프로그램이름

으로 검색할 수 있습니다.

예를 들어 example.exe라는 프로세스가 남아 있다고 가정하겠습니다.

tasklist | findstr example.exe

결과에서 PID가 7560으로 확인되었습니다.

이제 이 프로세스가 실제로 종료해도 되는 대상인지 확인합니다.

확실하다면:

taskkill /PID 7560

을 실행합니다.

이후:

tasklist /FI "PID eq 7560"

으로 다시 확인합니다.

이렇게 하면 무조건 PC를 재부팅하지 않고 남아 있는 프로세스만 찾아 처리할 수 있습니다.

실제 상황 2: 같은 프로그램이 여러 개 실행 중이다

이번에는 다음과 같은 결과가 있다고 가정하겠습니다.

example.exe 8240

example.exe 9312

두 프로세스의 이름이 동일합니다.

이 상황에서:

taskkill /IM example.exe /F

를 실행하면 같은 이미지 이름을 가진 프로세스들에 영향을 줄 수 있습니다.

하지만 실제로 문제가 발생한 프로세스가 PID 8240 하나뿐이라면:

taskkill /PID 8240

처럼 PID를 지정하는 편이 더 적절합니다.

이것이 프로세스 이름과 PID의 차이를 알아두어야 하는 이유입니다.

실제 상황 3: taskkill을 실행했는데 액세스가 거부된다

다음 명령어를 실행했다고 가정해보겠습니다.

taskkill /PID 8240

그런데 액세스가 거부되었다는 메시지가 나타납니다.

프로세스의 권한 수준에 따라 일반 CMD에서는 종료할 수 없는 경우가 있습니다.

자신이 종료해도 되는 프로세스라는 사실이 확실하다면 관리자 권한으로 CMD를 실행한 뒤 다시 확인할 수 있습니다.

하지만 관리자 권한에서도 정체를 모르는 시스템 프로세스를 강제로 종료하는 것은 피해야 합니다.

권한이 필요하다는 사실 자체가 “강제로 종료해도 안전하다”는 뜻은 아닙니다.

실제 상황 4: 종료했는데 프로세스가 다시 나타난다

프로세스를 종료한 뒤 다시 tasklist를 실행했는데 동일한 프로그램이 다시 나타나는 경우가 있습니다.

이때 PID를 자세히 보면 기존과 다른 번호일 수 있습니다.

예를 들어 처음에는:

example.exe 8240

이었습니다.

종료한 뒤:

example.exe 10432

가 다시 나타났습니다.

이 경우 프로그램이나 Windows 서비스 등이 해당 프로세스를 자동으로 다시 실행하고 있을 가능성을 생각할 수 있습니다.

계속해서:

taskkill /PID 번호 /F

를 반복하는 것보다 무엇이 해당 프로세스를 다시 실행하는지 확인하는 것이 우선입니다.

프로그램의 자동 시작 설정이나 관련 서비스 등을 확인해야 할 수 있습니다.

PID는 프로그램을 다시 실행하면 바뀔 수 있다

PID는 특정 프로그램에 영구적으로 부여되는 번호가 아닙니다.

예를 들어 오늘 example.exe의 PID가:

8240

이라고 해서 다음에 실행했을 때도 반드시 8240인 것은 아닙니다.

프로세스가 종료되고 다시 실행되면 다른 PID가 할당될 수 있습니다.

따라서 인터넷에서 본 예시 PID나 이전에 확인한 PID를 그대로 taskkill에 사용해서는 안 됩니다.

항상 현재 tasklist 결과에서 PID를 다시 확인해야 합니다.

taskkill /T 옵션은 무엇일까?

일부 프로그램은 하나의 프로세스만 실행하는 것이 아니라 자식 프로세스를 함께 실행할 수 있습니다.

taskkill에는 프로세스와 관련된 자식 프로세스까지 종료할 때 사용할 수 있는 /T 옵션이 있습니다.

예를 들면 다음과 같습니다.

taskkill /PID 8240 /T

강제 종료까지 필요하다면 다음과 같은 형태도 가능합니다.

taskkill /PID 8240 /T /F

하지만 /T를 사용하면 종료 범위가 넓어질 수 있습니다.

따라서 어떤 자식 프로세스들이 영향을 받는지 알지 못한 상태에서 무조건 /T /F를 붙이는 방식은 피하는 것이 좋습니다.

단순한 프로그램 하나를 종료하는 상황이라면 먼저 기본적인 PID 지정 방식부터 시도하는 것이 안전합니다.

프로세스 이름을 정확히 확인해야 하는 이유

사용자가 보는 프로그램 이름과 실제 프로세스 이미지 이름이 항상 똑같은 것은 아닙니다.

바탕화면에서는 특정 제품명으로 표시되더라도 tasklist에서는 실제 실행 파일 이름인 .exe 형태로 표시될 수 있습니다.

따라서 프로그램 이름을 추측해서 바로 taskkill을 실행하는 것보다 tasklist에서 실제 프로세스 이름을 확인하는 것이 좋습니다.

예를 들어:

tasklist

또는:

tasklist | findstr 일부문자열

을 이용해 먼저 확인합니다.

정확한 이미지 이름을 알았다면:

tasklist /FI "IMAGENAME eq example.exe"

처럼 다시 확인할 수 있습니다.

시스템 프로세스는 함부로 종료하지 않는다

tasklist를 실행하면 자신이 직접 실행한 프로그램뿐 아니라 Windows가 동작하는 데 필요한 여러 프로세스도 함께 표시됩니다.

프로세스가 많다는 이유로 사용하지 않는 프로그램이라고 생각해 종료해서는 안 됩니다.

특히 프로세스의 역할을 모른다면 먼저 무엇을 하는 프로세스인지 확인해야 합니다.

CMD를 관리자 권한으로 실행하고 /F 옵션까지 사용하면 일반적인 종료보다 강한 작업을 수행할 수 있습니다.

따라서:

이름을 모른다 → 종료하지 않는다

Windows 시스템 프로세스로 보인다 → 역할부터 확인한다

내가 실행한 프로그램임이 확실하다 → 종료 여부를 판단한다

라는 기준으로 접근하는 것이 좋습니다.

tasklist 결과를 특정 조건으로 필터링하기

tasklist의 /FI 옵션을 이용하면 여러 조건으로 프로세스를 찾을 수 있습니다.

프로세스 이름으로 찾는 기본적인 예시는:

tasklist /FI "IMAGENAME eq notepad.exe"

입니다.

PID로 찾으려면:

tasklist /FI "PID eq 8240"

처럼 사용할 수 있습니다.

전체 프로세스 목록을 눈으로 하나씩 찾는 것보다 필터를 이용하면 원하는 프로세스를 빠르게 확인할 수 있습니다.

특히 서버나 개발 도구처럼 많은 프로세스가 실행되는 환경에서는 유용합니다.

tasklist와 taskkill을 함께 사용하는 이유

taskkill만 알고 있으면 프로세스를 종료할 수는 있습니다.

하지만 무엇을 종료해야 하는지 정확하게 찾기 어렵습니다.

반대로 tasklist만 사용하면 실행 중인 프로세스를 확인할 수 있지만 문제를 해결하기 위해 종료해야 하는 상황에서는 추가 작업이 필요합니다.

그래서 두 명령어는 다음과 같은 흐름으로 함께 사용하면 좋습니다.

tasklist → 프로세스 확인

PID 확인 → 대상 특정

taskkill → 종료

tasklist → 종료 여부 재확인

이렇게 사용하면 단순히 강제 종료하는 것보다 훨씬 체계적으로 문제를 처리할 수 있습니다.

작업 관리자와 CMD 중 무엇을 사용해야 할까?

일반적인 상황에서는 Windows 작업 관리자를 이용하는 것이 훨씬 간단합니다.

GUI에서 프로세스 목록을 보고 원하는 프로그램을 선택해 종료할 수 있기 때문입니다.

그렇다고 CMD가 필요 없는 것은 아닙니다.

CMD는 다음과 같은 상황에서 특히 유용할 수 있습니다.

PID를 정확하게 지정해서 종료하고 싶을 때

프로세스 이름으로 빠르게 검색하고 싶을 때

백그라운드 프로세스를 확인할 때

명령어 기반으로 문제를 진단하고 있을 때

다른 CMD 명령어에서 확인한 PID와 연결해서 사용할 때

예를 들어 이전 글에서 netstat -ano를 이용해 포트를 사용하는 PID를 찾았다면 그 PID를 tasklisttaskkill에서 그대로 활용할 수 있습니다.

즉, CMD 명령어들이 서로 연결됩니다.

프로그램이 멈췄을 때 CMD 진단 순서

실제 상황에서는 다음 순서를 기억해두면 됩니다.

1. 프로그램의 정상 종료 시도

저장 가능한 작업이 있다면 먼저 저장합니다.

2. CMD 실행

cmd

3. 실행 중인 프로세스 확인

tasklist

4. 원하는 프로세스 검색

tasklist | findstr 프로그램이름

또는:

tasklist /FI "IMAGENAME eq 프로그램.exe"

5. PID 확인

예:

8240

6. 일반적인 종료 시도

taskkill /PID 8240

7. 종료 여부 확인

tasklist /FI "PID eq 8240"

8. 종료되지 않고 대상이 확실한 경우 강제 종료 검토

taskkill /PID 8240 /F

이 순서에서 가장 중요한 부분은 4번과 5번입니다.

어떤 프로세스를 종료할 것인지 확인하지 않은 상태에서 6번이나 8번부터 실행해서는 안 됩니다.

자주 하는 실수 1: 처음부터 /F를 붙인다

인터넷에서 taskkill 사용법을 검색하면 다음 명령어가 많이 보입니다.

taskkill /F /IM 프로그램.exe

실제로 강제 종료가 필요한 상황에서는 사용할 수 있습니다.

하지만 모든 상황에서 /F부터 사용하는 것은 좋은 습관이 아닙니다.

프로그램이 정상적으로 종료될 수 있다면 정상 종료가 우선입니다.

저장되지 않은 작업이 있다면 강제 종료로 데이터가 사라질 수 있습니다.

따라서 /F는 마지막 단계에 가까운 옵션으로 생각하는 것이 좋습니다.

자주 하는 실수 2: PID를 확인하지 않는다

프로세스 이름이 같더라도 여러 개가 실행되어 있을 수 있습니다.

특정 인스턴스 하나만 문제가 발생했다면 PID를 확인하는 것이 좋습니다.

예를 들어:

tasklist /FI "IMAGENAME eq example.exe"

로 여러 프로세스가 나타난다면 각각의 PID를 확인합니다.

그 후 종료할 대상이 확실할 때:

taskkill /PID 실제번호

를 사용합니다.

자주 하는 실수 3: 종료 후 확인하지 않는다

taskkill을 실행했다고 무조건 문제가 해결된 것은 아닙니다.

프로세스가 다시 실행될 수도 있고 종료 명령이 실패했을 수도 있습니다.

따라서 종료 후:

tasklist /FI "PID eq 번호"

를 다시 실행합니다.

또는 프로그램 이름으로 다시 검색합니다.

이 간단한 확인 과정만으로도 현재 상태를 더 정확하게 판단할 수 있습니다.

자주 하는 실수 4: 프로세스가 다시 생기는데 계속 죽이기만 한다

프로세스를 종료했는데 몇 초 뒤 다시 나타난다면 단순한 응답 없음 문제가 아닐 수 있습니다.

어떤 서비스나 다른 프로그램이 해당 프로세스를 자동으로 실행하고 있을 수 있습니다.

이런 경우에는 taskkill을 계속 반복하기보다 프로세스가 왜 다시 실행되는지를 확인해야 합니다.

CMD 명령어는 문제를 숨기는 용도가 아니라 문제의 원인을 찾기 위한 도구로 사용하는 것이 좋습니다.

21번 포트 충돌 해결 방법과 연결되는 부분

앞선 글에서는 8080 포트가 이미 사용 중일 때:

netstat -ano | findstr :8080

을 사용해 해당 포트를 사용하는 PID를 찾았습니다.

예를 들어 PID가 6248이었다면:

tasklist /FI "PID eq 6248"

로 어떤 프로그램인지 확인했습니다.

이번 글에서는 여기서 한 단계 더 나아가 tasklist와 taskkill 자체를 이용해 Windows 프로세스를 확인하고 종료하는 방법을 집중적으로 살펴봤습니다.

즉, 두 글은 연결되지만 목적은 다릅니다.

21번은 포트 충돌 해결이 목적이고 이번 글은 응답하지 않는 프로그램과 남아 있는 프로세스 해결이 목적입니다.

CMD로 프로그램 종료할 때 핵심 명령어 정리

실행 중인 모든 프로세스 확인:

tasklist

특정 이름 검색:

tasklist | findstr notepad

특정 이미지 이름 필터링:

tasklist /FI "IMAGENAME eq notepad.exe"

특정 PID 확인:

tasklist /FI "PID eq 8240"

PID로 종료:

taskkill /PID 8240

프로세스 이름으로 종료:

taskkill /IM notepad.exe

PID 강제 종료:

taskkill /PID 8240 /F

프로세스 트리까지 종료할 필요가 있는 경우:

taskkill /PID 8240 /T

명령어를 외우는 것보다 조회 → 확인 → 종료 → 재확인 순서를 기억하는 것이 더 중요합니다.

마무리

Windows에서 프로그램이 멈추고 닫기 버튼을 눌러도 종료되지 않는다면 무조건 PC를 재부팅할 필요는 없습니다.

CMD에서 현재 실행 중인 프로세스를 직접 확인할 수 있습니다.

먼저:

tasklist

를 실행합니다.

프로세스가 너무 많다면:

tasklist | findstr 프로그램이름

또는:

tasklist /FI "IMAGENAME eq 프로그램.exe"

를 이용해 원하는 프로그램을 찾습니다.

PID가 8240이라고 확인했다면 해당 프로세스가 정말 종료해도 되는 대상인지 다시 확인합니다.

그 후:

taskkill /PID 8240

을 이용해 종료를 시도할 수 있습니다.

프로세스가 종료됐는지 확인하려면:

tasklist /FI "PID eq 8240"

을 다시 실행합니다.

프로그램이 심하게 멈춰 일반적인 종료가 되지 않고, 강제 종료해도 되는 프로세스라는 사실이 확실하다면 마지막으로:

taskkill /PID 8240 /F

를 검토할 수 있습니다.

하지만 가장 중요한 원칙은 무조건 강제 종료부터 하지 않는 것입니다.

프로세스의 이름과 PID를 먼저 확인하고 저장되지 않은 데이터가 있는지 생각한 뒤 종료해야 합니다.

그리고 정체를 알 수 없는 Windows 시스템 프로세스는 함부로 종료하지 않는 것이 좋습니다.

결국 CMD를 이용한 프로세스 문제 해결은 다음 네 단계로 정리할 수 있습니다.

프로세스 찾기 → PID 확인 → 안전성 확인 → 필요한 경우 종료

이 흐름을 익혀두면 프로그램이 응답하지 않거나 백그라운드 프로세스가 계속 남아 있을 때 PC 전체를 재부팅하기 전에 문제가 되는 프로세스만 직접 찾아 해결할 수 있습니다.

댓글 남기기