Le port demandé est déjà occupé. Remplacez 3000 par votre port TCP ; si vous reconnaissez le serveur dans un terminal ouvert, arrêtez-le d’abord avec Ctrl+C.
macOS et Linux
Sous Linux, installez lsof si la commande est absente. Dans un terminal macOS ou Linux, identifiez le processus qui écoute sur le port TCP 3000 :
lsof -nP -iTCP:3000 -sTCP:LISTEN
Exemple de sortie :
COMMAND PID USER FD TYPE DEVICE NODE NAME
node 48231 user 23u IPv6 TCP *:3000 (LISTEN)
La colonne PID contient l’identifiant du processus.
Le PID 48231 est un exemple. Vérifiez le programme avec ps -p 48231 -o pid,ppid,user,command, en remplaçant le PID par celui trouvé. Les processus d’autres utilisateurs peuvent nécessiter des droits supplémentaires.
Pour arrêter proprement le processus :
kill 48231
Si le processus refuse de s’arrêter, revérifiez son PID avant de forcer son arrêt :
kill -9 48231
kill -9 doit rester une solution de dernier recours, car le processus est arrêté immédiatement sans pouvoir effectuer son nettoyage habituel.
Windows
Dans PowerShell ou l’invite de commandes Windows (hors WSL), recherchez le port 3000 :
netstat -ano | findstr :3000
Vérifiez que l’adresse locale se termine exactement par :3000 et que la ligne correspond à un port en écoute (LISTENING). La recherche peut aussi afficher des ports comme 30000 ou des connexions distantes. Le PID apparaît dans la dernière colonne.
Pour identifier l’application correspondant à ce PID :
tasklist /FI "PID eq 48231"
Fermez d’abord le serveur avec Ctrl+C dans son terminal, ou quittez normalement l’application. Si cela ne suffit pas, essayez :
taskkill /PID 48231
En dernier recours, forcez l’arrêt (les données non enregistrées peuvent être perdues) :
taskkill /PID 48231 /F
Remplacez 48231 par le PID trouvé précédemment. Dans WSL, utilisez les commandes Linux pour les processus Linux ; vérifiez aussi Windows si aucun processus WSL n’explique le conflit.
Si le processus revient immédiatement
Un gestionnaire de services, un watcher ou Docker peut le relancer. Arrêtez le service avec l’outil qui le gère. Si Docker est installé, vérifiez ses ports publiés :
docker ps --format "table {{.Names}}\t{{.Ports}}"
Identifiez le conteneur concerné et consultez Port Docker déjà alloué. Un processus Docker peut porter le port à la place de votre application.
Garder les deux applications
Si l’autre programme est utile, changez le port du serveur de développement. Pour un script dev qui lance Vite, par exemple :
npm run dev -- --port 3001 --strictPort
Les options varient selon le serveur. Mettez aussi à jour les URL du frontend, les proxys, les origines CORS ou les URL de retour d’authentification qui dépendent de ce port.
Vérifier le résultat
Relancez le diagnostic de votre système, puis votre serveur de développement. Si le port est encore occupé, vérifiez si un service redémarre automatiquement le processus.
Si le diagnostic ne montre rien, vérifiez le port exact, IPv4 et IPv6, ainsi que les droits nécessaires pour voir le processus. Sous Windows, un port réservé peut produire une erreur d’accès plutôt qu’un conflit visible.

