#!/bin/bash ID="$1" if [ -z "$ID" ]; then echo "❌ Usage: killguest " exit 1 fi echo "──────────────────────────────────────────────────────────" echo "🔍 Virtuelle Maschine oder Container wird gesucht..." echo "──────────────────────────────────────────────────────────" # Typ bestimmen if qm status "$ID" &>/dev/null; then TYPE="vm" elif pct status "$ID" &>/dev/null; then TYPE="ct" else echo "❌ Keine VM oder LXC mit ID $ID gefunden." exit 1 fi # Name ermitteln if [ "$TYPE" = "vm" ]; then NAME=$(qm config "$ID" | grep "^name:" | awk '{print $2}') elif [ "$TYPE" = "ct" ]; then NAME=$(pct config "$ID" | grep "^hostname:" | awk '{print $2}') fi [ -z "$NAME" ] && NAME="unknown" # Ausgabe if [ "$TYPE" = "vm" ]; then TYPE_LABEL="VM" else TYPE_LABEL="LXC" fi echo "" echo "📦 Maschine gefunden:" echo "♻️ Name: $NAME" echo "⚙️ Typ: $TYPE_LABEL" echo "" ######################################## # VM ######################################## if [ "$TYPE" = "vm" ]; then PID=$(ps -eo pid,cmd | grep -E "/usr/bin/kvm.*-id $ID" | grep -v grep | awk '{print $1}') if [ -z "$PID" ]; then echo "❌ Kein QEMU Prozess gefunden. VM kann nicht beendet werden." exit 1 fi echo "📋 Gefundener Prozess:" ps -fp $PID echo "" echo "──────────────────────────────────────────────────────────" echo "" read -p "💣 VM hart beenden? (y/N): " CONFIRM [[ "$CONFIRM" =~ ^[Yy]$ ]] || exit 0 echo "" echo "──────────────────────────────────────────────────────────" echo "" echo "🔥 Beende VM (PID $PID)..." kill -9 $PID sleep 1 if ps -p $PID > /dev/null 2>&1; then echo "❌ Prozess lebt noch." exit 1 else echo "✅ VM wurde beendet." fi echo "" echo "──────────────────────────────────────────────────────────" echo "" fi ######################################## # LXC ######################################## if [ "$TYPE" = "ct" ]; then # cgroup Methode PIDS=$(grep -l "lxc/$ID" /proc/*/cgroup 2>/dev/null | cut -d'/' -f3) # fallback für andere layouts if [ -z "$PIDS" ]; then PIDS=$(ps -eo pid,cmd | grep "lxc-start.*$ID" | grep -v grep | awk '{print $1}') fi if [ -z "$PIDS" ]; then echo "❌ Keine Prozesse gefunden. Container kann nicht beendet werden." exit 1 fi echo "📋 Gefundene Prozesse:" for PID in $PIDS; do ps -fp $PID 2>/dev/null done echo "" echo "──────────────────────────────────────────────────────────" echo "" read -p "💣 Container hart beenden? (y/N): " CONFIRM [[ "$CONFIRM" =~ ^[Yy]$ ]] || exit 0 echo "" echo "──────────────────────────────────────────────────────────" echo "" echo "🔥 Beende Container $ID..." for PID in $PIDS; do kill -9 $PID 2>/dev/null done echo "✅ Container Prozesse beendet." echo "" echo "──────────────────────────────────────────────────────────" echo "" fi