Files
catonline_ai/vw-agentic-rag/scripts/port_manager.sh
2025-09-26 17:15:54 +08:00

111 lines
3.1 KiB
Bash

#!/bin/bash
# Unified port management script
# Usage:
# ./port_manager.sh kill [port] - Kill processes on specific port (default: 3000)
# ./port_manager.sh clear - Clear all common development ports
# ./port_manager.sh check [port] - Check what's running on port
ACTION=${1:-help}
PORT=${2:-3000}
show_help() {
echo "🔧 Port Manager"
echo "Usage:"
echo " $0 kill [port] - Kill processes on specific port (default: 3000)"
echo " $0 clear - Clear all common development ports"
echo " $0 check [port] - Check what's running on port (default: 3000)"
echo " $0 help - Show this help"
}
kill_port() {
local port=$1
echo "🔍 Checking for processes using port $port..."
# Find processes using the specified port
PIDS=$(ss -tulpn 2>/dev/null | grep ":$port " | grep -o 'pid=[0-9]*' | cut -d'=' -f2 || true)
if [ -z "$PIDS" ]; then
echo "✅ Port $port is free"
return 0
fi
echo "📋 Found processes using port $port:"
for PID in $PIDS; do
PROCESS_INFO=$(ps -p $PID -o pid,ppid,cmd --no-headers 2>/dev/null || echo "$PID [process ended]")
echo " PID $PROCESS_INFO"
done
echo "💀 Killing processes on port $port..."
for PID in $PIDS; do
if kill -TERM $PID 2>/dev/null; then
echo " ✅ Terminated PID $PID"
sleep 1
# Check if still running, force kill if needed
if kill -0 $PID 2>/dev/null; then
kill -KILL $PID 2>/dev/null && echo " 🔥 Force killed PID $PID"
fi
else
echo " ❌ Failed to kill PID $PID"
fi
done
echo "✅ Port $port is now free"
}
clear_ports() {
echo "🧹 Clearing common development ports..."
PORTS=(3000 3001 8000 8001 8000 5000 5001)
for port in "${PORTS[@]}"; do
PIDS=$(ss -tulpn 2>/dev/null | grep ":$port " | grep -o 'pid=[0-9]*' | cut -d'=' -f2 || true)
if [ -n "$PIDS" ]; then
echo "💀 Killing processes on port $port..."
for PID in $PIDS; do
kill -KILL $PID 2>/dev/null && echo " ✅ Killed PID $PID" || echo " ❌ Failed to kill PID $PID"
done
else
echo "✅ Port $port is free"
fi
done
}
check_port() {
local port=$1
echo "🔍 Checking port $port..."
PIDS=$(ss -tulpn 2>/dev/null | grep ":$port " | grep -o 'pid=[0-9]*' | cut -d'=' -f2 || true)
if [ -z "$PIDS" ]; then
echo "✅ Port $port is free"
else
echo "📋 Port $port is in use by:"
for PID in $PIDS; do
PROCESS_INFO=$(ps -p $PID -o pid,ppid,cmd --no-headers 2>/dev/null || echo "$PID [process ended]")
echo " PID $PROCESS_INFO"
done
fi
}
case $ACTION in
kill)
kill_port $PORT
;;
clear)
clear_ports
;;
check)
check_port $PORT
;;
help)
show_help
;;
*)
echo "❌ Unknown action: $ACTION"
show_help
exit 1
;;
esac