In "vmctl status", VMs that are being stopped but are still running will simply show up as "running".
The diff below gives preference to showing the stopping state akin to how a paused VM is handled. Index: usr.sbin/vmctl/vmctl.c =================================================================== RCS file: /cvs/src/usr.sbin/vmctl/vmctl.c,v retrieving revision 1.76 diff -u -p -u -p -r1.76 vmctl.c --- usr.sbin/vmctl/vmctl.c 27 Jan 2021 07:21:12 -0000 1.76 +++ usr.sbin/vmctl/vmctl.c 7 Mar 2021 15:39:03 -0000 @@ -708,7 +708,7 @@ add_info(struct imsg *imsg, int *ret) * * Returns a string representing the current VM state, note that the order * matters. A paused VM does have the VM_STATE_RUNNING bit set, but - * VM_STATE_PAUSED is more significant to report. + * VM_STATE_PAUSED is more significant to report. Same goes for stopping VMs. * * Parameters * vm_state: mask indicating the vm state @@ -720,10 +720,10 @@ vm_state(unsigned int mask) return "paused"; else if (mask & VM_STATE_WAITING) return "waiting"; - else if (mask & VM_STATE_RUNNING) - return "running"; else if (mask & VM_STATE_SHUTDOWN) return "stopping"; + else if (mask & VM_STATE_RUNNING) + return "running"; /* Presence of absence of other flags */ else if (!mask || (mask & VM_STATE_DISABLED)) return "stopped";