Tuez tout service exécuté sur un port spécifique


13

J'essaie d'écrire un script qui tue le service exécuté sur un port spécifique. Voici mon script:

a=$(ps ax | grep 4990 | grep java | awk '{print $1}')
kill -9 $a

C'est un programme java. Ce script fonctionne parfois, mais échoue mystérieusement la plupart du temps.

Existe-t-il un autre moyen de tuer un service exécuté sur un port? Mon port est 4990.


Votre script tuerait également les processus Java exécutés sur d'autres animaux tels que 14990.
roaima

Réponses:


32

Vous pouvez essayer fuser:

fuser -k 4990/tcp

Ou utilisez lsofpour obtenir l'ID du processus, puis alimentez-le kill:

kill $(sudo lsof -t -i:4990)

Dois-je remplacer tcp par java?
Abhishek dot py

@Abhishekdotpy: Non, utilisez tcp.
cuonglm

Merci pour ce -tdrapeau, j'en ai besoin depuis si longtemps.
Jackson

Pourriez-vous donner un indice sur la façon de passer correctement la dernière ligne à ssh?
Vladimir Protsenko

@VladimirProtsenko pouvez-vous fournir plus de contexte?
cuonglm

4

Si vous souhaitez supprimer un service ou un processus exécuté sur le numéro de port 8080, vous devez d'abord trouver le numéro d'identification de processus (PID) du port 8080, puis le tuer. Exécutez la commande suivante pour rechercher le numéro de port 8080 PID:

sudo lsof -t -i:8080

Ici,

  • sudo - commande pour demander le privilège administrateur (identifiant utilisateur et mot de passe).
  • lsof - liste de fichiers (également utilisé pour lister les processus associés)
  • -t - affiche uniquement l'ID de processus
  • -i - affiche uniquement le processus lié aux connexions Internet
  • : 8080 - afficher uniquement les processus dans ce numéro de port

Ainsi, vous pouvez maintenant facilement tuer votre PID en utilisant la commande suivante:

sudo kill -9 <PID>

Ici,

  • kill - commande pour tuer le processus
  • -9 - avec force

Vous pouvez utiliser une commande pour tuer un processus sur un port spécifique à l'aide de la commande suivante:

sudo kill -9 $(sudo lsof -t -i:8000)

Pour plus d'informations, vous pouvez voir le lien suivant Comment tuer un processus sur un port spécifique sous Linux


L'utilisation ne kill -9donne au processus cible aucune possibilité de ranger. Envisagez d'utiliser de la plaine kill, au moins au début.
roaima

1
<?php
  $port = $argv[1]; 
  if(!empty($port) && is_numeric($port) ){
  $pid = trim(shell_exec("lsof -t -i:".$port));
  if(!empty($pid)){
     shell_exec("sudo kill -9 ".$pid);
     echo "pid : ".$pid."  killed which is listened port : ".$port."\xA";
  }
  else{
     echo " [X] no such process found for pid : ".$port."\xA";
  }
  }
  else{ 
     echo " invalid pid \xA";
  }
?>
  1. créer un fichier php kill.php
  2. exécutez le fichier php avec le port requis $ php kill.php 8088

1
L'utilisation ne kill -9donne au processus cible aucune possibilité de ranger. Envisagez d'utiliser de la plaine kill, au moins au début.
roaima

+1 pour l'utilisation de PHP pour cette tâche.
Bananguin

@ G-Man par erreur, il a ajouté
nivas

@Bananguin pour tuer l'identifiant de processus exact du port donné en l'utilisant lors de l'exécution du processus de regroupement avec jenkins
nivas

lors de l'exécution de fichiers de script et de sa lsof -t -i:port_idcommande contain lors du processus de génération, le port_idou process idde port_idpeut être vide, cette fois nous obtenons une erreur de commande, pour éviter ce type d'erreur, je l'utilise. ici, je peux tuer l'identifiant de processus exact du port donné
nivas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.