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.