Sometimes a VM can go in an unresponsive mode and you cannot shut it down or reboot it from the vSphere client. When this happens we need to be more persuasive in telling the VM to shut down. Log in to the ESXi server with SSH, find the World ID for the unresponsive VM and kill the process, this is done like this:
esxcli vm process list
This will list all the running VMs on the server, use grep -A2 to filter the VM name and the world ID, like this:
esxcli vm process list | grep -A2 “VM Name”
Kill the process with this command:
esxcli vm process kill -t=soft -w=”WORLD_ID”
This will kill the process in a “soft” way, use -t=hard to be even more persuasive and as a last resort attempt you can use -t=force. If none of the three shuts down the VM, a reboot of the host is required.
To automate things a bit i assembled this one-liner for easy use:
esxcli vm process kill -t=soft -w=`esxcli vm process list | grep -A2 “VM Name” | grep World | awk ‘{print $3}’`
This will softly shut down the VM with “VM Name”