Processus de suppression exécuté sur le port 80

14

Voici le processus que je veux tuer:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd
Sooraj S
la source

Réponses:

31

Il existe plusieurs façons de déterminer quel processus en cours d'exécution utilise un port.

À l'aide de l'unité de fusion, il donnera le (s) PID des multiples instances associées au port d'écoute.

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

Après l'avoir découvert, vous pouvez soit arrêter, soit tuer le (s) processus.

Vous pouvez également trouver les PID et plus de détails en utilisant lsof

sudo lsof -i tcp:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx   1858     root    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1867 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1868 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1869 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1871 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  

Pour limiter aux sockets qui écoutent sur le port 80 (par opposition aux clients qui se connectent au port 80):

sudo lsof -i tcp:80 -s tcp:listen

Pour les tuer automatiquement:

sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill
Rui F Ribeiro
la source
1
Je voudrais souligner que l'unité de fusion a également le -kcommutateur pour tuer tous les processus correspondants et -ipour tuer de manière interactive (vous invitant à chacun).
A. Wilcox
7

Voici un oneliner qui montre la commande à exécuter:

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

Remplacez echopar sudopour que le processus soit réellement tué.

jlliagre
la source
Remplacer echopoursudo
EliuX
C'est la réponse parfaite avec laquelle nous devons simplement remplacer notre numéro de port 80.
Youssof H.
4

Trois options pour la liste des ports ouverts sont offerts dans jsh de whatisonport:

netstat -anp --numeric-ports | grep ":${PORT}\>.*:" 

fuser -v "${PORT}"/tcp

lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"

Je préfère netstatcar il est rapide, concis et peut lister les ports ouverts par d'autres utilisateurs. (Bien qu'il ait toujours besoin de privilèges de superutilisateur / utilisateur pour répertorier les noms et les PID de ces processus.)

Les sorties

$ netstat -anp --numeric-ports | grep ":80\>.*:" 
tcp6       0      0 :::80           :::*            LISTEN      1914/apache2    

$ fuser -v "80/tcp"
                     USER        PID ACCESS COMMAND
80/tcp:              root       1914 F.... apache2
                     www-data  12418 F.... apache2
...

$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2  1914     root    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
apache2 12418 www-data    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
...

L'utilisation de grepdans deux cas consiste à faire correspondre uniquement le port du côté local et à ignorer les connexions ouvertes à un port distant 80. (Une alternative serait d'utiliser -lavec netstatou avec lsofà utiliser -sTCP:LISTEN, mais j'aime les greps ci-dessus car ils attraper également les connexions sortantes du port donné, ce qui peut parfois être intéressant.)

Avec lsofnous utilisons -Ppour afficher :80au lieu de :httprendre le grep possible. L' -S 2option oblige lsofà se terminer en temps opportun.

Tuer le processus

En supposant que nous voulons utiliser netstat, nous pourrions saisir les PID comme ceci:

$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...

Et nous pourrions même transmettre ces PID à kill:

... | xargs -d '\n' kill -KILL

Cependant, il existe souvent un risque de faux positif lors de l'utilisation d'expressions rationnelles, donc je recommanderais simplement de regarder la sortie initiale de netstatpuis de décider manuellement d'exécuter ou non:

$ kill -KILL 1914

Voir également

J'ai un autre script appelé listopenportsqui peut être intéressant.

joeytwiddle
la source
3

Vous avez déjà découvert le processus à tuer: c'est le numéro de processus 20570et son binaire a le nom httpdécrit à la fin de la ligne de sortie de netstat. Vous pouvez le tuer par numéro kill 20570ou par nom, killall httpdmais je ne recommanderais pas de le faire de cette façon.

Les ports inférieurs à 1024 ont une utilisation standardisée (normalement), vous pouvez les rechercher et bien d'autres avec less /etc/services. L'entrée pour le port 80 est même commentée:

http            80/tcp          www             # WorldWideWeb HTTP

Il s'agit donc très probablement d'un serveur Web. Le nom que vous avez est httpdet man httpddevrait vous donner le grand indice que c'est le binaire Apache qui convient. Apache est l'un des grands acteurs, il dispose de programmes de gestion confortables, mais vous n'en avez pas besoin pour une simple action de démarrage / arrêt.

Vous avez de la menthe? Avec un bureau normal? Regardez ensuite dans le Control Centerdessous Systemet cliquez Services. Vous devez être administrateur pour y faire quoi que ce soit. Faites défiler la liste jusqu'à ce que vous trouviez quelque chose intitulé "serveur Web" (j'ai lighttpd au lieu d'Apache et je ne sais pas exactement à quoi ressemblerait l'entrée Apache) et décochez-la.

Si vous voulez juste l'arrêter temporairement, essayez dans la console

sudo service stop httpd

et commencer par sudo service start httpd. service --status-allrenvoie une liste de tous les services serviceconnus et pouvant être traités. Un raccourci pour redémarrer un service (c'est-à-dire: l'arrêter et le démarrer dans cet ordre) est service --full-restart SERVICEd' SERVICEêtre le nom du service, par exemple: httpddans le cas d'Apache.

La plupart des programmes que vous trouvez netstatpeuvent être gérés de cette manière. Certains ne peuvent pas et certains n'ont même pas de page de manuel mais ceux-ci sont rares.

deamentiaemundi
la source
0

Il existe un moyen simple de procéder. Vérifiez d'abord quel processus utilise le port 80 par netstat :

netstat -ntl | grep 80

Vous avez maintenant le nom du processus et tuez le processus avec la commande killall :

killall -9 process name
amit singh
la source
Quels sont les dangers de l'utilisation de la commande «killall»?
Peter Mortensen
2
-1 pour killallsans explication ni avertissement.
guntbert
1
Il y a plusieurs problèmes avec killall. En plus de pouvoir mettre à genoux un système en cas de problème, il peut également tuer plusieurs instances d'un processus qui n'est pas associé au port. Pour couronner le tout, le plus gros problème de killall est que si quelqu'un dans une boîte Solaris essaie de l'utiliser, il tue tous les processus en cours d'exécution.
Rui F Ribeiro