Files
rpa_vision_v3/deploy/dgx/vm_stop.sh
Dom bd1c9d2c8a
Some checks failed
tests / Lint (ruff + black) (push) Failing after 1m50s
tests / Tests unitaires (sans GPU) (push) Failing after 1m53s
tests / Tests sécurité (critique) (push) Has been skipped
feat(deploy+bench+ops): DGX vm scripts, Windows RDP launcher, bench cases, agent_chat enable script
2026-07-02 13:32:36 +02:00

51 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# Persistent VM stop — ACPI poweroff via QEMU monitor, then SIGTERM, then SIGKILL
# Kill swtpm after QEMU exits. Cleanup PID/sockets.
VMROOT=/home/aivanov/quickemu-win11-arm-lea
MONITOR_SOCKET="$VMROOT/windows-11-arm-lea-monitor.socket"
PIDFILE="$VMROOT/windows-11-arm-lea.pid"
# Step 1: Send ACPI poweroff via QEMU monitor
if [ -S "$MONITOR_SOCKET" ]; then
echo "system_powerdown" | socat - UNIX-CONNECT:"$MONITOR_SOCKET" - > /dev/null 2>&1
echo "ACPI poweroff sent, waiting 30s..."
for i in $(seq 1 30); do
if [ ! -f "$PIDFILE" ] || ! ps -p "$(cat "$PIDFILE" 2>/dev/null)" > /dev/null 2>&1; then
echo "QEMU exited gracefully"
exit 0
fi
sleep 1
done
fi
# Step 2: SIGTERM (10s more)
QEMU_PID=$(cat "$PIDFILE" 2>/dev/null)
if [ -n "$QEMU_PID" ] && ps -p "$QEMU_PID" > /dev/null 2>&1; then
echo "Still running, sending SIGTERM..."
kill "$QEMU_PID" 2>/dev/null
for i in $(seq 1 10); do
if ! ps -p "$QEMU_PID" > /dev/null 2>&1; then
echo "QEMU exited after SIGTERM"
break
fi
sleep 1
done
fi
# Step 3: SIGKILL
QEMU_PID=$(cat "$PIDFILE" 2>/dev/null)
if [ -n "$QEMU_PID" ] && ps -p "$QEMU_PID" > /dev/null 2>&1; then
echo "Still running, SIGKILL..."
kill -9 "$QEMU_PID" 2>/dev/null
sleep 2
fi
# Step 4: Kill swtpm
pkill -f "swtpm.*windows-11-arm-lea" 2>/dev/null
sleep 2
# Step 5: Cleanup
rm -f "$PIDFILE" "$VMROOT"/*.sock "$VMROOT"/*.socket 2>/dev/null
echo "VM stop complete"