web-dev-qa-db-fra.com

Processus de suppression exécuté sur le port 80

Voici le processus que je veux tuer:

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

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

En utilisant le fuser, 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 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 écouter 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
31
Rui F Ribeiro

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 echo par Sudo pour que le processus soit réellement tué.

7
jlliagre

Trois options pour lister les ports ouverts sont proposées dans jsh 's 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 netstat car il est rapide, concis et peut lister les ports ouverts par d'autres utilisateurs. (Bien qu'il faudra toujours des 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 grep dans deux cas consiste à ne faire correspondre que le port du côté local et à ignorer les connexions ouvertes à un port distant 80. (Une alternative serait d'utiliser -l avec netstat, ou avec lsof pour utiliser -sTCP:LISTEN, mais j'aime les greps ci-dessus car ils intercepteront également les connexions sortantes depuis le port donné, qui peut parfois être d'intérêt.)

Avec lsof nous utilisons -P afficher :80 au lieu de :http pour rendre la grep possible. Le -S 2 l'option force lsof à se terminer en temps opportun.

Tuer le processus

En supposant que nous voulons utiliser netstat, nous pourrions récupérer 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 y a souvent un risque de faux positif lors de l'utilisation d'expressions rationnelles, donc je recommanderais simplement de regarder la sortie initiale de netstat puis de décider manuellement d'exécuter ou non:

$ kill -KILL 1914

Voir également

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

4
joeytwiddle

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

Les ports inférieurs à 1024 ont une utilisation standardisée (normalement), vous pouvez rechercher ceux-ci 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 httpd et man httpd devrait 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 Center sous System et cliquez sur Services. Vous devez être administrateur pour y faire quoi que ce soit. Faites défiler vers le bas 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 commencez par Sudo service start httpd. service --status-all renvoie une liste de tous les services que service connaît et peut gérer. Un raccourci pour redémarrer un service (c'est-à-dire: l'arrêter et le démarrer dans cet ordre) est service --full-restart SERVICE avec SERVICE étant le nom du service, par exemple: httpd dans le cas d'Apache.

La plupart des programmes que vous trouvez avec netstat peuvent être gérés de cette façon. Certains ne peuvent pas et certains n'ont même pas de page de manuel mais ceux-ci sont rares.

3
deamentiaemundi

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
0
amit singh