You've been there. You click Force Stop on an EC2 instance because a normal stop hung for ten minutes. The console spins, you wait, and the status stays stuck on stopping. It doesn't move. Not after five minutes, not after an hour. You refresh, reboot the console, even log out and back in — still stuck.
This usually happens when you've force-stopped an instance that had heavy I/O or a problematic storage volume, or when the underlying host has issues. The control plane is waiting on the hypervisor to report back, and it never does. The culprit here is almost always a storage volume that's not detaching cleanly or a host that's degraded.
Here's the thing: you can't just keep clicking Force Stop. It won't do anything. You need to nudge AWS from a different angle. Let me walk you through the fix that's worked for me every time.
Root cause in plain English
When you force stop an EC2 instance, AWS sends a hard shutdown command to the hypervisor. But if the instance's root volume or any attached EBS volume is busy or has a pending system call that won't release, the hypervisor can't complete the shutdown. The instance goes into a stopping state and waits indefinitely. Sometimes the host itself is having issues, and the control plane can't communicate with it.
In my experience, this is often triggered by a runaway process on Linux — like a stuck NFS mount or a kernel thread that's not responding — or a Windows instance with pending updates that refuse to die. But the fix is the same regardless of OS.
The fix: terminate and start fresh (or keep the volume)
Don't waste time with more stop attempts. The fastest, most reliable way to get out of this is to force terminate the instance. Yes, you lose the instance, but you can keep the root volume if you want to recover data. Here's how.
- Open the EC2 console and go to Instances.
- Select the stuck instance. Right-click it, choose Instance State, then Terminate.
- If it asks for confirmation, click Yes, Terminate. If it doesn't respond to terminate within a minute, move to step 4.
- If terminate hangs too, use the AWS CLI. Run this command with your instance ID:
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0
If that returns an error or hangs, use the --force flag (yes, it exists for terminate):
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0 --force
Wait a few minutes. The instance should move to terminated. If you need the data, detach the root volume before terminating — but that's tricky if the instance is stuck. Instead, after termination, the volume will be available in Volumes; you can attach it to a new instance as a secondary volume to retrieve data.
What if terminate also fails?
Rare, but it happens. If the instance is still stuck after an hour, you've got a bigger problem. Try these steps:
- Check for CloudWatch alarms that might be in a bad state and blocking API calls. Disable any alarms tied to the instance.
- Check the instance's IAM role — if it's been deleted or modified, it can cause weird behavior. But this is a long shot.
- Open a support case with AWS. Seriously, if you've tried CLI force terminate and it's still stuck, the host is likely degraded. AWS can force-terminate on their end. It usually takes a few hours, but they'll fix it.
Preventing this from happening again
Force stopping should be a last resort. It's not just about the hang — it can corrupt file systems. Instead, when an instance won't stop gracefully, try these before hitting Force Stop:
- SSH into the instance and run
shutdown -h now(Linux) orshutdown /s /t 0(Windows). This gives the OS a chance to flush writes. - If you have a load balancer, deregister the instance first to stop new traffic.
- Check the system logs in the console — they might show a kernel panic or a hung process that you can kill from within.
Still stuck? Here's what to check if everything fails
If you've tried terminate, CLI force terminate, and even a support case, but the instance is still stopping, there's one more thing: check the attached volumes. Sometimes a volume stuck in detaching state will keep the instance hostage. Go to Elastic Block Store > Volumes and look for any volume attached to the instance. If you see a volume in detaching, force detach it:
aws ec2 detach-volume --volume-id vol-1234567890abcdef0 --force
Once the volume is detached, the instance might finally release. If it still doesn't, you're in the hands of AWS support — but that's rare. In 14 years, I've only seen that twice.
Bottom line: when an EC2 instance is stuck in stopping, don't keep clicking. Terminate it, recover your data if needed, and move on. It's faster than waiting for the gremlins to sort themselves out.