#!/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