Cómo dejar de buscar procesos con lsof y organizar tus puertos
Situación familiar: inicias un servidor local y la terminal escupe un error terriblemente conocido Error: listen EADDRINUSE: address already in use :::3000. El worker de ayer no terminó correctamente, un proceso en segundo plano se quedó colgado, o un contenedor de Docker está sosteniendo silenciosamente el socket requerido.

Por lo general, aquí es donde comienza la rutina. Abres la terminal, recuerdas la sintaxis de lsof -i :3000 en macOS o grep netstat -ano en Windows, copias el PID y escribes kill -9. Si tienes una docena de microservicios, la terminal se convierte en un cementerio de comandos repetitivos.
El proyecto PortPal resuelve este pequeño pero persistente problema. Es un panel de escritorio ligero que muestra los puertos ocupados, identifica el stack y elimina procesos redundantes con un solo botón.
Qué hay bajo el capó y por qué lo necesitas
La mayoría de las utilidades similares son simplemente wrappers primitivos alrededor de comandos del sistema o arrastran pesados frameworks como Electron, consumiendo un gigabyte de RAM solo para mostrar una lista de cinco líneas.
Los creadores de PortPal tomaron un camino más agradable y construyeron la aplicación con Tauri 2, Rust y React 19. Gracias a Rust, el backend apenas carga la CPU en segundo plano, y la ventana nativa se abre al instante.
La herramienta resuelve varias tareas cotidianas:
- Encuentra puertos locales colgados y extrae metadatos de procesos.
- Reconoce el entorno basándose en el contexto de archivos y puertos predeterminados.
- Ayuda a detener forzosamente un proceso o reiniciarlo.
- Visualiza las conexiones de red entre servicios como un grafo.
Funcionalidades Principales
Reconocimiento de Proyectos en Lugar de Números Crudos
Un monitor de sistema normal solo te dirá el PID y el nombre del binario (por ejemplo, node o python). Si hay cinco proyectos diferentes de Node.js ejecutándose, distinguirlos por la salida de la terminal es imposible.
PortPal trabaja de manera más inteligente. No solo mira el número del socket, sino que también escanea los directorios de trabajo. El programa busca archivos de manifiesto (package.json, Cargo.toml, go.mod) y hace coincidir el número de puerto con entornos de desarrollo populares:
3000 -> React / Next.js
5173 -> Vite
4200 -> Angular
8000 -> Django
5432 -> PostgreSQL
6379 -> Redis
Como resultado, el panel muestra tarjetas claras: puedes ver inmediatamente que tu frontend se está ejecutando en el puerto 5173 y la base de datos está escuchando en el 5432.
Mapa Interactivo de Conexiones
El detalle más interesante de la interfaz es el mapa topológico construido con la biblioteca D3.js.

En lugar de una tabla plana, obtienes una simulación física con nodos. Los nodos están coloreados según sus tecnologías: azul para bases de datos, morado para bundlers de Vite, verde para el backend de Node.js. Los nodos se pueden arrastrar por la pantalla, hacer zoom con la rueda del ratón y examinar los enlaces de red activos en tiempo real. Si estás desarrollando un sistema con múltiples microservicios, dicho grafo ayuda a entender rápidamente quién está sosteniendo actualmente una conexión con quién.
Gestión con Un Clic y Botón de Emergencia
Cada proceso tiene un botón de terminación junto a él. Haz clic en la cruz — el proceso termina al instante, el socket se libera.
Si un puerto está ocupado por un script caído que PortPal ha recordado, permanece cerca un botón de reinicio. Este ejecuta el comando nuevamente en una terminal separada.
En la interfaz, los puertos se dividen en dos grupos: procesos de desarrollo y servicios del sistema. Matar accidentalmente un servicio del sistema es más difícil. Y para los casos en que has terminado tu jornada laboral y quieres cerrar de una vez todo el zoo de servidores locales que están ejecutándose, hay un botón Kill All para el grupo de Frameworks de Desarrollo.
Funcionamiento en Segundo Plano y Bandeja del Sistema
PortPal se minimiza al área de notificaciones. El icono de la bandeja cambia de color dependiendo de la presencia de conflictos de puertos. Mientras la ventana está cerrada, un hilo en segundo plano registra eventos: cuándo apareció un nuevo proceso, qué socket se liberó y dónde ocurrió un pico de tráfico. El historial con todas las marcas de tiempo se almacena en una pestaña separada de logs.
Arquitectura y Stack
El stack técnico del proyecto luce moderno:
Backend: Rust (sysinfo + системные API сетевого стека)
Runtime: Tauri 2
Frontend: React 19 + TypeScript + Vite 7
Графика: D3.js v7 (симуляция графов на силах)
Стили: Vanilla CSS со стеклянными эффектами
Al abandonar las pesadas bibliotecas de componentes frontend y usar Webview nativo, la aplicación es ligera y consume recursos mínimos durante el escaneo constante de sockets.
Cómo Ejecutar
Los desarrolladores publican builds listos para usar en la página de releases del repositorio:
- Para Windows, están disponibles
.msiy.exe. - Para macOS, se preparan builds
.dmgpara chips Apple Silicon y procesadores Intel. - Para Linux, hay paquetes
.deby el formato universal.AppImage.
Si quieres construir la utilidad desde el código fuente o agregar tus propias reglas de detección, necesitarás Rust versión 1.70 o superior y Node.js 18+:
# Клонируем репозиторий
git clone https://github.com/wisher567/Portpal.git
cd portpal
# Ставим зависимости и запускаем в dev-режиме
npm install
npm run tauri dev
En modo dev, el hot reloading de componentes de React a través de Vite funciona en paralelo con la compilación de la parte de Rust.
Impresiones Personales
El proyecto es joven, actualmente en la versión 0.2, pero ya luce como una herramienta lista para usar en el día a día. La tabla básica de puertos y las tarjetas funcionan rápido. El mapa de D3.js inicialmente parece decoración, pero al depurar simultáneamente una puerta de enlace API, una base de datos y un par de clientes, resulta genuinamente útil.
Las desventajas menores incluyen la base de datos limitada para el reconocimiento automático de frameworks. Si ejecutas un servicio personalizado en un puerto no estándar como 9211, PortPal lo mostrará como un proceso regular hasta que vincules manualmente el contexto. Pero dado que el proyecto es código abierto bajo la licencia MIT, agregar a la lista de firmas en el código es sencillo.
Quién lo encontrará útil: desarrolladores web, ingenieros full-stack y todos los que regularmente manejan una docena de microservicios locales y están cansados de memorizar comandos de limpieza de sockets.
Proyectos relacionados