Comment trouver (et tuer) un processus en cours d'exécution sur un certain port? [dupliquer]

30

Duplicata possible:
Recherche du processus qui utilise un certain port sous Linux

J'utilise Ubuntu Linux 11.04. Comment puis-je écrire une expression de script shell qui trouvera le processus en cours d'exécution sur le port 4444 et puis tuera le processus?

Communauté
la source
Je ne pense pas que ce soit un doublon car il demande comment tuer, pas trouver, le processus sur le port: fuser -k 9000 / tcp
Kris

Réponses:

47

Vous pouvez utiliser lsofpour trouver le processus:

lsof -t -i:4444

ne listerait que le pid du processus d'écoute sur le port 4444. Vous pourriez simplement dire

kill `lsof -t -i:4444`

si vous étiez courageux.

Ernest Friedman-Hill
la source
14
+1 pour «si vous avez été courageux».
M. Shickadance
7

Vous utilisez lsof:

# lsof -n | grep TCP | grep LISTEN | grep 4444

La sortie sera quelque chose comme:

pname 16125 user 28u IPv6 4835296 TCP *:4444 (LISTEN)

Où la première colonne est le nom du processus et la deuxième colonne l'ID du processus. Vous analysez ensuite la sortie, découvrez ce qu'est l'ID de processus (PID) et utilisez la killcommande pour le tuer.

Pablo Santa Cruz
la source
1
Je n'avais jamais entendu parler de lsof auparavant. En regardant la page de manuel, elle semble être incroyablement utile. Merci!
tout sous linux est un fichier et lsof vous permet de trouver des fichiers alors ... oui, très utile
jcollum
2

Alternativement, vous pouvez utiliser netstat -apsi lsofn'est pas disponible sur votre système (car il ne l'est pas sur un système de boîte occupée avec lequel je travaille régulièrement).

DaveRandom
la source
bon appel, je me demandais pourquoi cela ne fonctionnait pas sur une image de docker dérivée de busybox sur laquelle je travaillais
jcollum
2
kill -9 `netstat -lanp --protocol=inet | grep 4444 | awk -F" " '{print $7}' | awk -F"/" '{print $1}'`

Utilise netstat pour répertorier les sockets INET d'écoute avec les ports numériques et les processus parents. Filtre la chaîne 4444, supprime la 7e colonne (pid / nom du processus) et la divise en outre par "/" pour obtenir le pid. Passe cela pour tuer la commande.

Arek B.
la source
2
Je recommanderais contre le kill -9. Il ne permet pas le nettoyage et certaines applications Internet sont plus susceptibles d'avoir des ressources qui doivent être fermées proprement.
Rich Homolka