Uccidi qualsiasi servizio in esecuzione su una porta specifica


13

Sto cercando di scrivere uno script che uccide il servizio in esecuzione su una porta specifica. Questa è la mia sceneggiatura:

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

È un programma Java. Questo script funziona a volte, ma misteriosamente fallisce la maggior parte del tempo.

Esiste un altro modo per interrompere un servizio in esecuzione su una porta? La mia porta è 4990.


La tua sceneggiatura ucciderebbe anche i processi Java in esecuzione su altri animali domestici come 14990.
roaima

Risposte:


32

Puoi provare fuser:

fuser -k 4990/tcp

O usando lsofper ottenere l'id di processo, quindi feed a kill:

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

Dovrei sostituire tcp con java?
Abhishek dot py,

@Abhishekdotpy: No, usa tcp.
cuonglm,

Grazie per quella -tbandiera, ne ho bisogno da così tanto tempo.
Jackson,

Potresti dare un suggerimento su come passare correttamente l'ultima riga a ssh?
Vladimir Protsenko,

@VladimirProtsenko puoi fornire più contesto?
cuonglm

4

Se si desidera interrompere qualsiasi servizio o processo in esecuzione sul numero di porta 8080, prima è necessario trovare il numero di identificazione del processo (PID) della porta 8080 e quindi ucciderlo. Eseguire il comando seguente per trovare il PID del numero di porta 8080:

sudo lsof -t -i:8080

Qui,

  • sudo - comando per chiedere il privilegio di amministratore (ID utente e password).
  • lsof - elenco di file (utilizzato anche per elencare i processi correlati)
  • -t - mostra solo l'ID del processo
  • -i - mostra solo il processo relativo alle connessioni Internet
  • : 8080 - mostra solo i processi in questo numero di porta

Quindi ora puoi facilmente uccidere il tuo PID usando il seguente comando:

sudo kill -9 <PID>

Qui,

  • kill - comando per terminare il processo
  • -9 - con forza

È possibile utilizzare un comando per terminare un processo su una porta specifica utilizzando il comando seguente:

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

Per di più puoi vedere il seguente link Come uccidere un processo su una porta specifica su Linux


L'uso non kill -9dà al processo di destinazione alcuna possibilità di riordinare. Prendi in considerazione l'utilizzo di plain kill, almeno inizialmente.
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. crea un file php kill.php
  2. eseguire il file php con la porta richiesta $ php kill.php 8088

1
L'uso non kill -9dà al processo di destinazione alcuna possibilità di riordinare. Prendi in considerazione l'utilizzo di plain kill, almeno inizialmente.
roaima,

+1 per l'utilizzo di PHP per questa attività.
Bananguin,

@ G-Man per errore ha aggiunto
nivas

@Bananguin per uccidere l'identificativo esatto del processo di una determinata porta lo sto usando quando
eseguo il

quando si eseguono file di script e il relativo lsof -t -i:port_idcomando contengono quando il processo di compilazione il port_ido process iddi port_idpuò essere vuoto, quella volta si ottiene un errore di comando, per evitare questo tipo di errore si usa questo. qui posso uccidere l'
identificativo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.