ports : lsof project-aware pour macOS

ports : lsof project-aware pour macOS

Brève · 1 min de lecture
🇬🇧 Cet article est aussi disponible en English

lsof -iTCP -sTCP:LISTEN -nP | grep :3000 — tout le monde connaît, personne ne s’en souvient vraiment. Et surtout, ça ne répond qu’à la moitié de la question : oui il y a quelque chose sur le port 3000, mais lequel de tes cinq process node ?

ports règle ça. Un binaire Go, zéro dépendance, macOS uniquement.

$ ports
PORT   PROTO  PID    COMMAND  PARENT  PATH                CAFFEINATE  AGE
3000   TCP    15711  node     zsh     ~/code/web-app      -           27m
3030   TCP    12405  node     zsh     ~/code/api          on:82031    2h
5432   TCP    23514  ssh      launchd ~/code/infra        -           10d

Le répertoire de projet est affiché directement. Plus besoin de croiser le PID avec ps aux.

Kill, pause, inspect — sans chercher le PID

# Libérer un port en une commande
ports kill 3000

# Ça n'a pas répondu ? Force.
ports force-kill 3000

# Tuer tout ce qui tourne sous un projet
ports kill --dir ~/code/web-app

# Geler sans tuer (pratique pour débugger)
ports pause 3000
ports resume 3000

# Inspecter avec probe HTTP
ports inspect 3000

Le flag --dir est la commande que j’aurais voulu avoir depuis des années : éteindre tout ce qui tourne sous un projet en une ligne, sans chercher les PIDs un par un.

Ce qui change pour un workflow agent IA

Le Mac endort les process dès qu’il idle trop longtemps. Pour des sessions d’agents qui durent des heures, c’est un problème réel. ports caffeinate attache le mécanisme natif macOS directement sur le process qui t’intéresse.

# Garder actif ce qui écoute sur ce port
ports caffeinate 3000

# Garder actif un agent IA par nom
ports caffeinate codex
ports caffeinate "claude code"

# Suivre les nouveaux process enfants au fur et à mesure
ports caffeinate codex --dir ~/code/agent --follow

# Et pour retrouver les PIDs d'agents qui n'écoutent pas de port
ports --find codex "claude code" gemini cursor

--follow est la feature clé pour les sessions longues : dès qu’un nouveau process enfant apparaît sous le projet, il est cafféiné automatiquement. Utile quand Claude Code respawn ses workers.

Conseil

ports --json sort du JSON propre, pipeable dans jq. Pratique pour de l’automatisation ou intégrer ça dans un script de setup de projet.

Installation via Homebrew : brew install erdemylmaz/ports-cli/ports

Source : github.com/erdemylmaz/ports-cli

← Retour aux articles