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.

Abhishek dot py
la source
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)
cuonglm
la source
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

Mahfuz
la source
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
nivas
la source
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