← retour aux snippets

lsof: quel processus occupe un port

Identifier rapidement le processus qui écoute sur un port et le libérer proprement.


objectif

Trouver quel processus utilise un port (PID, commande, utilisateur) et le stopper de manière sûre si nécessaire.

code minimal

# afficher le processus qui écoute sur le port 3000 (IPv4/IPv6)
lsof -iTCP:3000 -sTCP:LISTEN -Pn

utilisation

# sortir uniquement les PID (pratique pour enchaîner)
lsof -tiTCP:3000 -sTCP:LISTEN

# terminer proprement le processus (SIGTERM), si présent
pid="$(lsof -tiTCP:3000 -sTCP:LISTEN)"; [ -n "$pid" ] && kill -TERM "$pid"

# en cas de multiples processus, tuer chacun proprement
lsof -tiTCP:3000 -sTCP:LISTEN | xargs -r -n1 kill -TERM

# vérifier si le port est encore occupé
lsof -iTCP:3000 -sTCP:LISTEN -Pn || echo "port 3000 libre"

# UDP (ex: DNS sur 53)
lsof -iUDP:53 -Pn

variante(s) utile(s)

# Linux: alternative rapide avec ss (nécessite privilèges pour voir tous les processus)
ss -ltnp 'sport = :3000'

# si lsof n'est pas installé (fallback macOS/Linux)
# macOS: networksetup n'aide pas; installez lsof via brew. Linux: apt/yum install lsof.

# tuer de force en dernier recours (à éviter)
lsof -tiTCP:3000 -sTCP:LISTEN | xargs -r -n1 kill -KILL

# surveiller en continu (toutes les secondes)
watch -n 1 'lsof -iTCP:3000 -sTCP:LISTEN -Pn'

notes

  • -Pn désactive la résolution DNS/ports (plus rapide et fiable en scripts).
  • -t donne uniquement les PID, -sTCP:LISTEN filtre les sockets en écoute.
  • privilégiez kill -TERM puis vérifiez; n’utilisez -KILL qu’en ultime recours.
  • sudo peut être nécessaire pour voir/killer des processus appartenant à d’autres utilisateurs.