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
-Pndésactive la résolution DNS/ports (plus rapide et fiable en scripts).-tdonne uniquement les PID,-sTCP:LISTENfiltre les sockets en écoute.- privilégiez
kill -TERMpuis vérifiez; n’utilisez-KILLqu’en ultime recours. - sudo peut être nécessaire pour voir/killer des processus appartenant à d’autres utilisateurs.