Voici le processus que je veux tuer:
sooorajjj@Treako ~/Desktop/MerkMod $ Sudo netstat -tunap | grep :80
tcp6 0 0 :::80 :::* LISTEN 20570/httpd
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
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é.
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.)
$ 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.
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
J'ai un autre script appelé listopenports
qui peut être intéressant.
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.