107 votes

Déterminer le pid du processus écoutant sur un certain port

Comme le titre l'indique, je gère plusieurs serveurs de jeu, et chacun d'entre eux a le même problème. name mais différent PID et le port numéro. Je voudrais faire correspondre le PID du serveur qui écoute sur un certain port, et ensuite je voudrais tuer ce processus. J'en ai besoin pour terminer mon bash script.

Est-ce que c'est possible ? Parce que je n'ai pas encore trouvé de solutions sur le web.

156voto

Laurynas Points 1292

Version courte que vous pouvez passer à la commande kill :

lsof -i:80 -t

13 votes

Cela inclut également les processus qui sont connecté sur ce port. lsof -i4TCP:80 -sTCP:LISTEN -t est probablement ce que vous voulez, à la place.

0 votes

Exactement ce que je recherchais. Je voulais tuer un processus en recherchant le port sur lequel il est exécuté.

0 votes

@Nevir que voulez-vous dire par "inclut également les processus qui sont connectés sur ce port" ? Pouvez-vous expliquer ?

131voto

stanwise Points 1208

Le site -p drapeau de netstat vous donne le PID du processus :

netstat -l -p

*utiliser sudo si vous montrez - au lieu de PID

Edit : La commande nécessaire pour obtenir les PIDs des utilisateurs de sockets sous FreeBSD est la suivante sockstat . Comme nous l'avons constaté lors de la discussion avec @Cyclone, la ligne qui fait l'affaire est :

sockstat -4 -l | grep :80 | awk '{print $3}' | head -1

2 votes

netstat: 80: unknown or uninstrumented protocol a utilisé le 80 (nginx) à des fins de test. Ne fonctionne pas.

0 votes

netstat -l -p 80 quand je le fais. netstat -l -p Je vais chercher le manuel : pastebin.com/raw.php?i=q9jeQSBj

5 votes

Essayez netstat -nlp | grep :80 au lieu de

17voto

gavenkoa Points 6974

netstat -p -l | grep $PORT et lsof -i :$PORT Les solutions sont bonnes mais je préfère fuser $PORT/tcp à la syntaxe d'extension de POSIX (qui fonctionne pour les coreutils ) comme pour les tuyaux :

pid=`fuser $PORT/tcp`

il imprime le pid pur pour que vous puissiez laisser tomber sed de la magie.

Une chose qui fait fuser mon outil préféré est la possibilité d'envoyer un signal à ce processus directement (cette syntaxe est également une extension de POSIX) :

$ fuser -k $port/tcp       # with SIGKILL
$ fuser -k -15 $port/tcp   # with SIGTERM
$ fuser -k -TERM $port/tcp # with SIGTERM

De même, -k est supporté par FreeBSD : http://www.freebsd.org/cgi/man.cgi?query=fuser

11voto

K.G. Points 536

netstat -nlp devrait vous indiquer le PID de ce qui écoute sur quel port.

2 votes

netstat: 80: unknown or uninstrumented protocol a utilisé le 80 (nginx) à des fins de test. Ne fonctionne pas.

4voto

Debashish Sen Points 53

Syntaxe :

kill -9 $(lsof -t -i:portnumber)

Exemple : Pour tuer le processus fonctionnant sur le port 4200, exécutez la commande suivante

kill -9 $(lsof -t -i:4200)

Testé dans Ubuntu.

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