1208 votes

Comment tuer un processus en cours d'exécution sur un port particulier dans Linux?

J'ai essayé de fermer le tomcat en utilisant ./shutdown.sh depuis le répertoire /bin de tomcat. Mais j'ai constaté que le serveur n'était pas fermé correctement. Et donc je n'ai pas pu redémarrer
Mon tomcat fonctionne sur le port 8080.

Je veux tuer le processus tomcat s'exécutant sur le 8080. Je veux d'abord avoir la liste des processus s'exécutant sur un port spécifique (8080) afin de sélectionner le processus à tuer.

2 votes

1438voto

nudzo Points 830

Ce fuser 8080/tcp vous affichera le PID du processus lié à ce port.

Et ce fuser -k 8080/tcp tuera ce processus.

Fonctionne uniquement sur Linux. Plus universel est l'utilisation de lsof -i4 (ou 6 pour IPv6).

Forme générale :

# lister le processus TCP lié au port PORT
fuser PORT/tcp
# Exemple : lister le processus TCP lié au port 8080
fuser 8080/tcp

# lister le processus UDP lié au port PORT
fuser PORT/udp
# Exemple : lister le processus UDP lié au port 8080
fuser 8080/udp

3 votes

Est-ce que cela ferme également un socket éventuellement connecté au port 8080 ?

0 votes

Bien sûr, tous les descripteurs de fichiers sont fermés lorsque le processus se termine.

15 votes

Il ne ferme pas correctement le port. Le port est mis dans l'état TIME_WAIT après la fermeture du processus parent. Le système d'exploitation finira par fermer complètement le port après environ 60 secondes. Cela signifie que vous ne pouvez pas réutiliser le port pendant au moins 60 secondes (sauf si vous donnez l'option de réutilisation au socket).

356voto

veer7 Points 897

Utilisez la commande

 sudo netstat -plten | grep java

utilisez grep java car tomcat utilise java comme processus.

Cela affichera la liste des processus avec le numéro de port et l'identifiant du processus

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java

le nombre avant /java est un identifiant de processus. Utilisez maintenant la commande kill pour terminer le processus

kill -9 16085

-9 implique que le processus sera arrêté de force.

11 votes

Vous voudrez peut-être ajouter que l'on pourrait avoir besoin de privilèges root pour obtenir les noms de processus via netstat.

2 votes

@JonasWielicki vous pouvez voir ceux que vous possédez sans privilèges root.

0 votes

J'avais besoin des privilèges root pour netstat. Y a-t-il un moyen de savoir d'où le processus vient réellement? Autant que je pouvais dire, j'avais fermé toutes les applications, mais cela aurait pu être depuis une fenêtre de terminal où j'ai involontairement poussé les processus vers une tâche en arrière-plan. Peut-être aurais-je dû exécuter la commande 'ps' dans le terminal pour voir tous les processus en premier...

48voto

Bepetersn Points 736

Cela imprime sur stdout les identifiants de processus de tout ce qui fonctionne sur :

fuser -n tcp  

Cela imprime aussi quelques informations sur stderr, donc:

fuser -n tcp  2> /dev/null

Nous pouvons ensuite fournir ces identifiants de processus à la commande kill:

sudo kill $(fuser -n tcp  2> /dev/null)

Vous pouvez également mettre ceci dans une fonction si vous le faites souvent:

function killport() {
    sudo kill $(fuser -n tcp $1 2> /dev/null)
}

41voto

Sanjay s. Points 31

Pour connaître le pid du service fonctionnant sur un port spécifique :

netstat -tulnap | grep :*port_num*

vous obtiendrez la description de ce processus. Maintenant, utilisez kill ou kill -9 pid. Facilement tué.

par exemple

netstat -ap | grep :8080

tcp6       0      0 :::8080       :::*    LISTEN      1880/java 

Maintenant :

kill -9 1880

N'oubliez pas d'exécuter toutes les commandes en tant que root

14voto

ben rhouma moez Points 51

Linux: Vous pouvez utiliser cette commande si vous connaissez le port :

netstat -plten | grep LISTEN | grep 8080

AIX:

netstat -Aan | grep LISTEN | grep 8080

Vous prenez ensuite la première colonne (exemple: f100050000b05bb8) et exécutez la commande suivante :

rmsock f100050000b05bb8 tcpcb

Arrêtez le processus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X