111 lines
3.1 KiB
Bash
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
|