>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
TypeScript

Jak przestać szukać procesów przez lsof i uporządkować porty

Znana sytuacja: uruchamiasz lokalny serwer, a terminal wypluwa bolesnie znajomy błąd Error: listen EADDRINUSE: address already in use :::3000. Wczorajszy proces roboczy nie zakończył się prawidłowo, jakiś proces w tle się zawiesił lub kontener Dockera cicho trzyma wymagane gniazdo.

PortPal — Developer Port Manager

Zwykle w tym miejscu zaczyna się rutyna. Otwierasz terminal, przypominasz sobie składnię lsof -i :3000 w systemie macOS lub polecenie grep netstat -ano w Windows, kopiujesz PID i wpisujesz kill -9. Jeśli masz tuzin mikroserwisów, terminal zamienia się w cmentarz powtarzalnych poleceń.

Projekt PortPal rozwiązuje ten mały, ale uporczywy problem. To lekki pulpit desktopowy, który wyświetla zajęte porty, identyfikuje stos technologiczny i zabija zbędne procesy jednym przyciskiem.

Co kryje się pod maską i dlaczego tego potrzebujesz

Większość podobnych narzędzi to albo prymitywne nakładki na polecenia systemowe, albo ciągną za sobą ciężkie Electron, zużywające gigabajt pamięci RAM tylko po to, by wyświetlić pięciowierszową listę.

Twórcy PortPala wybrali przyjemniejszą ścieżkę i zbudowali aplikację w oparciu o Tauri 2, Rust i React 19. Dzięki Rust backend minimalnie obciąża CPU w tle, a natywne okno otwiera się natychmiast.

Narzędzie rozwiązuje kilka codziennych zadań:

  • Znajduje zawieszone lokalne porty i wyodrębnia metadane procesu.
  • Rozpoznaje środowisko na podstawie kontekstu plików i domyślnych portów.
  • Pomaga wymusić zatrzymanie procesu lub go ponownie uruchomić.
  • Wizualizuje połączenia sieciowe między usługami jako graf.

Kluczowe funkcje

Rozpoznawanie projektów zamiast suchych liczb

Zwykły monitor systemowy powie ci tylko PID i nazwę pliku binarnego (na przykład node lub python). Jeśli działa pięć różnych projektów Node.js, rozróżnienie ich na podstawie danych wyjściowych terminala jest niemożliwe.

PortPal działa mądrzej. Nie tylko sprawdza numer gniazda, ale także skanuje katalogi robocze. Program szuka plików manifestu (package.json, Cargo.toml, go.mod) i dopasowuje numer portu do popularnych środowisk programistycznych:

W rezultacie panel wyświetla przejrzyste karty: od razu widać, że frontend działa na porcie 5173, a baza danych nasłuchuje na 5432.

Interaktywna mapa połączeń

Najciekawszym szczegółem interfejsu jest mapa topologiczna zbudowana przy użyciu biblioteki D3.js.

Port Map — Interactive Network Topology

Zamiast płaskiej tabeli otrzymujesz symulację fizyczną z węzłami. Węzły są kolorowane według technologii: niebieski dla baz danych, fioletowy dla bundlerów Vite, zielony dla backendu Node.js. Węzły można przeciągać po ekranie, przybliżać kółkiem myszy, a aktywne połączenia sieciowe można badać w czasie rzeczywistym. Jeśli tworzysz system z wieloma mikroserwisami, taki graf pomaga szybko zrozumieć, kto aktualnie utrzymuje połączenie z kim.

Zarządzanie jednym kliknięciem i przycisk awaryjny

Obok każdego procesu znajduje się przycisk zakończenia. Kliknięcie krzyżyka — proces kończy się natychmiast, gniazdo zostaje zwolnione.

Jeśli port jest zajęty przez rozbity skrypt, który PortPal zapamiętał, w pobliżu pozostaje przycisk ponownego uruchomienia. Uruchamia polecenie ponownie w osobnym terminalu.

W interfejsie porty są podzielone na dwie grupy: procesy deweloperskie i usługi systemowe. Przypadkowe zabicie usługi systemowej jest trudniejsze. A gdy skończysz pracę na dzień i chcesz zamknąć całe zoo działających lokalnych serwerów naraz, jest przycisk Kill All dla grupy Dev Frameworks.

Praca w tle i zasobnik systemowy

PortPal minimalizuje się do obszaru powiadomień. Ikona w zasobniku zmienia kolor w zależności od obecności konfliktów portów. Gdy okno jest zamknięte, wątek w tle rejestruje zdarzenia: kiedy pojawił się nowy proces, które gniazdo zostało zwolnione i gdzie wystąpił skok ruchu. Historia ze wszystkimi znacznikami czasu jest przechowywana na osobnej karcie dzienników.

Architektura i stos technologiczny

Stos technologiczny projektu wygląda nowocześnie:

Rezygnując z ciężkich bibliotek komponentów frontendowych i używając natywnego Webview, aplikacja jest lekka i zużywa minimalne zasoby podczas ciągłego skanowania gniazd.

Jak uruchomić

Twórcy publikują gotowe kompilacje na stronie wydań repozytorium:

  • Dla Windows dostępne są wersje .msi i .exe.
  • Dla macOS przygotowano kompilacje .dmg dla chipów Apple Silicon i procesorów Intel.
  • Dla Linuksa dostępne są pakiety .deb i uniwersalny format .AppImage.

Jeśli chcesz zbudować narzędzie ze źródeł lub dodać własne reguły wykrywania, potrzebujesz Rust w wersji 1.70 lub nowszej oraz Node.js 18+:

W trybie deweloperskim działa gorące przeładowywanie komponentów React przez Vite równolegle z kompilacją części Rust.

Osobiste wrażenia

Projekt jest młody, aktualnie w wersji 0.2, ale już wygląda jak gotowe do użycia codzienne narzędzie. Podstawowa tabela portów i karty działają szybko. Mapa D3.js początkowo wydaje się dekoracją, ale podczas jednoczesnego debugowania bramy API, bazy danych i kilku klientów okazuje się naprawdę pomocna.

Men sze niedociągnięcia obejmują ograniczoną bazę danych automatycznego rozpoznawania frameworków. Jeśli uruchamiasz niestandardową usługę na niestandardowym porcie, takim jak 9231, PortPal wyświetli ją jako zwykły proces, dopóki ręcznie nie powiążesz kontekstu. Jednak ponieważ projekt jest open source na licencji MIT, dodanie do listy sygnatur w kodzie jest proste.

Kto go znajdzie przydatny: programiści webowi, inżynierowie full-stack i wszyscy, którzy regularnie zarządzają tuzinem lokalnych mikroserwisów i są zmęczeni zapamiętywaniem poleceń czyszczenia gniazd.

Powiązane projekty