Hyper-V에서 실행 중인 가상 머신(VM)이 어떤 이유로든 응답하지 않고 멈춰 있는 경우, Hyper-V 관리자 콘솔에서 해당 버튼을 클릭해도 시작/중지/재설정이 되지 않는다면 이 문제를 해결할 수 있는 유일한 방법은 호스트 OS에서 해당 VM을 담당하는 프로세스를 강제로 종료하는 것입니다. 이 글에서는 호스트 전체와 실행 중인 모든 VM을 재부팅하지 않고(Hyper-V HA 클러스터나 라이브 마이그레이션이 없는 환경을 가정), Windows Server 2016/2019에서 멈춘 Hyper-V VM을 강제로 재시작하는 방법을 소개합니다.
Hyper-V VM이 '중지 중/시작 중' 상태에서 멈춘 경우
Hyper-V VM 중 하나가 중지 중(Stopping, Stopping-Critical) 또는 시작 중(Starting x%) 상태에서 멈춰 있는 상황을 가정해 보겠습니다.

게스트 OS는 응답하지 않으며, Hyper-V 관리자의 '끄기(Turn Off)', '종료(Shut Down)', '다시 설정(Reset)' 버튼은 비활성화되어 있거나, 클릭 시 다음과 같은 오류가 발생합니다:
응용 프로그램이 VM 상태를 변경하는 동안 오류가 발생했습니다.
상태 변경에 실패했습니다.
개체가 현재 상태에 있는 동안에는 작업을 수행할 수 없습니다.

Hyper-V 관리자가 '가상 머신 관리 서비스에 연결하는 중'에서 멈춘 경우
Hyper-V 관리자 콘솔에 가상 머신이 표시되지 않고 '가상 머신 관리 서비스에 연결하는 중(Connecting to Virtual Machine Management service)' 오류가 반환된다면, vmms.exe(Hyper-V 가상 머신 관리 서비스) 프로세스를 다시 시작해야 합니다. 이 작업은 안전하며 실행 중인 VM을 중단시키지 않습니다. vmms.exe 프로세스를 다시 시작하는 가장 쉬운 방법은 services.msc 콘솔을 통해 vmms 서비스를 재시작하거나, PowerShell 서비스 관리 cmdlet을 사용하는 것입니다:
Get-Service vmms | Restart-Service

작업 관리자에서 멈춘 VM 프로세스를 종료하는 방법
Hyper-V 호스트 전체를 재부팅하지 않고 멈춘 VM을 강제로 종료하는 유일한 방법은 게스트 OS에서 실행 중인 해당 워커 프로세스를 종료하는 것입니다. Hyper-V 호스트의 모든 VM은 vmwp.exe(Virtual Machine Worker Process) 프로세스를 통해 실행됩니다. 프로세스를 찾으려면 먼저 해당 가상 머신의 GUID를 알아내야 합니다.
VM의 GUID는 Hyper-V 관리자 콘솔에서 확인할 수 있습니다. Hyper-V 서버 설정을 열면 서버 섹션에 VM 구성 파일의 저장 위치가 표시됩니다(예: D:\VMStore).

파일 탐색기에서 해당 디렉터리를 열고 가상 머신과 같은 이름의 폴더를 찾습니다. 그런 다음 *.vmcx 확장자를 가진 VM 구성 파일 이름에 지정된 GUID를 복사합니다.

작업 관리자를 실행하고 세부 정보(Details) 탭으로 이동합니다. 모든 가상 머신은 각각 자신만의 vmwp.exe 인스턴스로 실행됩니다. 어떤 프로세스가 해당 VM을 담당하는지 확인하려면 앞서 확인한 멈춘 VM의 GUID가 필요합니다. 사용자 이름(User name) 열에 해당 VM의 GUID가 포함된 vmwp.exe 프로세스를 찾아 종료(작업 끝내기)합니다.

가상 머신이 강제로 중지되며, 이후 자유롭게 작업을 수행할 수 있습니다.
PowerShell을 사용하여 멈춘 Hyper-V VM 종료하기
PowerShell CLI를 사용하면 멈춘 가상 머신의 프로세스를 훨씬 더 쉽게 찾아 종료할 수 있습니다. 관리자 권한으로 PowerShell 콘솔을 실행합니다(계정이 로컬 'Hyper-V 관리자' 그룹에 추가되어 있어야 합니다).
이 경우 기본 제공 Stop-VM cmdlet으로는 VM을 종료할 수 없습니다. Stop-VM -Force 명령을 실행해도 마찬가지로 멈추는데, 이는 VM의 응답을 기다리고 있기 때문입니다.
따라서 이 경우에도 VM의 GUID로 프로세스를 종료해야 합니다. VM 이름으로 GUID를 확인할 수 있습니다. 예를 들어 SVM-GUARDEDHOST1이라는 이름의 VM GUID를 가져오려면 다음 명령을 실행합니다:
$VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID
VM 이름 전체를 입력하기 번거롭다면, 해당 Hyper-V 호스트에 등록된 모든 VM 목록을 확인할 수 있습니다:
Get-VM | Select Name, Id

결과 목록에서 해당 VM의 GUID를 복사합니다.
이 VMGUID에 해당하는 vmwp.exe 프로세스 식별자(PID)를 찾습니다:
$VMWMProc = (Get-WmiObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})
그런 다음 Stop-Process 명령을 사용하여 이 프로세스를 강제로 종료합니다:
Stop-Process ($VMWMProc.ProcessId) –Force
이것이 멈춘 Hyper-V 가상 머신의 작업 프로세스를 강제로 종료하는 가장 간단한 방법입니다.
팁: VMWare ESXi에서 멈춘 VM의 프로세스를 종료하는 유사한 방법에 대한 설명도 함께 참고하시기 바랍니다.
Hyper-V: VM 상태 변경 실패
때로는 멈춘 VM 프로세스를 종료한 후에도 VM을 켤 수 없는 경우가 있습니다. 게다가 시작(Starting) 상태에서 멈추며 다음 오류가 발생합니다:
가상 머신 연결
상태 변경에 실패했습니다.
이 경우 다음 항목들을 점검해 보세요:
- Hyper-V VM 파일이 저장된 디스크에 충분한 여유 공간이 있는지 확인합니다.
- VM 설정에 ISO 이미지가 연결되어 있다면 해당 이미지에 접근 가능한지 확인합니다.
- VM의 네트워크 어댑터 설정을 확인합니다. 가상 네트워크 어댑터는 기존 Hyper-V 가상 스위치에 연결되어 있어야 합니다(어떤 NIC에도 '네트워크 어댑터 – 구성 오류' 상태가 없어야 합니다).

- Hyper-V 가상 머신 관리 서비스(VMMS)가 실행 중이며 '중지 중' 상태로 멈춰 있지 않은지 확인합니다.
- 백신 소프트웨어가 VM 파일에 대한 접근을 차단하지 않는지 확인합니다. VM 디렉터리 경로를 백신 제외 목록에 추가하세요(Windows Server 2016의 기본 제공 Windows Defender 백신에 제외 항목을 추가하는 방법을 참고하세요).
- 이벤트 뷰어 -> 응용 프로그램 및 서비스 로그 -> Microsoft -> Windows -> Hyper-V-Worker에서 Hyper-V 관련 오류가 있는지 확인합니다.