From afc503f4e28bc4c8ad86b3a509b5416662e2db80 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Sat, 11 Apr 2026 17:02:00 +0200 Subject: [PATCH] first commit --- killguest.sh | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 killguest.sh diff --git a/killguest.sh b/killguest.sh new file mode 100644 index 0000000..c48c244 --- /dev/null +++ b/killguest.sh @@ -0,0 +1,135 @@ +#!/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 \ No newline at end of file