Come eliminare un processo Linux in base al numero di porta

0
148
fatmawati achmad zaenuri/Shutterstock.com

Per terminare un processo Linux è necessario il suo ID o il suo nome. Se tutto ciò che sai è la porta che sta utilizzando, puoi ancora ucciderlo? Sì, in diversi modi.

Processi di uccisione

A volte un processo Linux può non rispondere. Potrebbe smettere di funzionare correttamente, oppure potrebbe continuare a funzionare ma ignorare le richieste di arresto o iniziare a consumare memoria, CPU o larghezza di banda della rete.

RELATEDCome eliminare i processi dal terminale Linux

Qualunque sia la tua motivazione, ci sono modi per uccidere un processo dalla riga di comando di Linux. Il metodo classico consiste nell'utilizzare il comando kill con l'ID processo del processo che desideri terminare. Il comando di uccisione ha alcuni parenti stretti. Il comando pkill ucciderà un processo per nome e killall ucciderà tutti i processi che può trovare che condividono parte di un nome.

Se tutto ciò che sai su un processo è che sta usando una porta sul tuo computer, ci sono ancora modi per identificarlo e ucciderlo. In termini di rete, “port” può significare una connessione fisica in cui inserisci un cavo con una spina all'estremità, ad esempio un cavo di rete CAT5 o 6, oppure può significare una porta software.

Una porta software è la parte finale di una connessione di rete. L'indirizzo IP di un dispositivo identifica il computer o un altro dispositivo di rete. Le applicazioni all'interno del computer utilizzano porte diverse. Questi forniscono un altro livello di granularità. Il traffico di rete è arrivato al computer corretto utilizzando l'indirizzo IP e, utilizzando l'indirizzamento della porta, può essere recapitato all'applicazione corretta.

È come la posta che arriva in un hotel, quindi viene smistato e consegnato nelle apposite sale. L'indirizzo IP è come la via dell'hotel e i numeri delle camere sono come i numeri di porta.

Se vedi attività di rete su una porta e non riconosci il processo che lo sta generando, o il suo comportamento è problematico o sospetto, potresti voler interrompere il processo. Anche se tutto ciò che sai è il numero di porta, puoi rintracciare il processo e terminarlo.

Creare connessioni con socat

Quindi che abbiamo alcune connessioni da eliminare, utilizzeremo socat per creare connessioni di rete utilizzando protocolli diversi. Devi installare socat . Per installarlo su Ubuntu, usa questo comando:

sudo apt install socat

Su Fedora usa dnf:

sudo dnf install socat

Su Manjaro devi digitare:

sudo pacman -S socat

< /p>

La sintassi per socat è semplice anche se un po' prolissa. Dobbiamo fornire gli indirizzi di origine e di destinazione. Per ognuno di questi, dobbiamo fornire il protocollo, l'indirizzo IP e il numero di porta. Possiamo sostituire STDIN o STDOUT come sorgente o destinazione.

Questo comando crea una connessione tra un socket di ascolto TCP sulla porta 7889, sull'indirizzo IP di loopback di 127.0.0.1, e STDOUT. La e commerciale “&” esegue il comando in background, in modo da mantenere l'accesso alla riga di comando.

socat tcp-listen:7889,bind=127.0.0.1 stdout &

Creeremo altre due connessioni in modo da avere una piccola selezione di socket che utilizzano protocolli diversi. Creeremo una connessione UDP e una connessione SCTP. L'unica parte del comando che cambia è il protocollo.

socat udp-listen:7889,bind=127.0.0.1 stdout & socat sctp-listen:9999,bind=127.0.0.1 stdout &

RELAZIONATO: Qual ​​è la differenza Tra TCP e UDP?

Uso di Kill

Naturalmente, possiamo usare kill per terminare il processo, purché sappiamo qual è l'ID del processo. Per trovare il PID, possiamo utilizzare il comando lsof.

Per elencare i dettagli del processo sulla porta 7889 che utilizza il protocollo TCP, utilizziamo l'opzione -i (indirizzo Internet), in questo modo.

lsof -i tcp:7889

Il PID di questo processo è 3141 e possiamo andare avanti e usarlo con kill:

sudo kill 3141

Possiamo risparmiarci un po' di fatica se utilizziamo i tubi. Se convogliamo l'output di lsof in awk e diciamo ad awk di cercare le righe che contengono la porta a cui siamo interessati—7889—e stampiamo il secondo campo da quella riga, isoleremo il PID.

lsof -i tcp:7889 | awk '/7889/{print $2}'

Possiamo quindi inviare l'output da awk al comando kill usando xargs. Il comando xargs prende l'input convogliato e lo passa a un altro comando come parametri della riga di comando. Useremo xargs con il comando kill.

lsof -i tcp:7889 | awk '/7889/{stampa $2}' | xargs kill

Non riceviamo alcun feedback visivo. Nel tipico modo di Linux, nessuna notizia è una buona notizia. Se vuoi controllare che il processo sia terminato, puoi usare lsof ancora una volta.

lsof -i tcp:7889

Poiché lsof non segnala nulla, sappiamo che tale connessione non esiste.

Possiamo rimuovere un processo utilizzando il protocollo UDP semplicemente sostituendo “tcp” con “udp” nel nostro comando precedente.

lsof -i udp:7889 | awk '/7889/{stampa $2}' | xargs kill

Tuttavia, lsof non riconosce il protocollo SCTP.

lsof -i sctp:7889

Possiamo usare il comando ss per farlo. Stiamo usando l'opzione -S (SCTP) per cercare i socket SCTP, l'opzione -a (tutti) per cercare tutti i tipi di socket (ascolto, accettazione, connesso, ecc.) e -p (processi ) opzione per elencare i dettagli del processo utilizzando il socket.

ss -Sap

Possiamo analizzare quell'output usando grep e awk . Potremmo anche analizzarlo usando grep e alcune espressioni regolari PERL, ma in questo modo è molto più facile da capire. Se dovessi usarlo più di una o due volte, probabilmente ne faresti un alias o una funzione di shell.

Convogliamo l'output da ss a grep e cercheremo il nostro numero di porta, 7889. Convogliamo l'output da grep a awk. In awk, utilizziamo l'opzione -F (stringa di separazione) per impostare una virgola  “,” come delimitatore di campo. Cerchiamo una stringa contenente “pid=” e stampiamo il secondo campo delimitato da virgole da quella stringa.

ss -Sap | grep “7889” | awk -F',' '/pid=/{print $2}'

Questo ci ha dato la stringa “pid=2859.”

Possiamo reindirizzarla nuovamente in awk, impostare il delimitatore di campo sul segno di uguale “=&#8221 ; e stampa il secondo campo da quella stringa, che sarà il testo dietro il segno di uguale.

ss -Sap | grep “7889” | awk -F',' '/pid=/{stampa $2}' | awk -F'=' '{stampa $2}'

Ora abbiamo isolato l'ID del processo. Possiamo usare xargs per passare il PID da uccidere come parametro della riga di comando.

ss -Sap | grep “7889” | awk -F',' '/pid=/{stampa $2}' | awk -F'=' '{stampa $2}' | xargs kill

Questo uccide il processo che stava usando il socket del protocollo SCTP sulla porta 7889.

Il comando fusore

Il comando fusore semplifica molto le cose. Lo svantaggio è che funziona solo con socket TCP e UDP. Tra i lati positivi, questi sono i due tipi più comuni di prese con cui dovrai avere a che fare. Il comando fuser era già installato sui computer Ubuntu, Fedora e Manjaro che abbiamo controllato.

Tutto quello che devi fare è usare l'opzione -k (kill) e fornire la porta e il protocollo. È possibile utilizzare l'opzione -n ​​(spazio dei nomi) e fornire il protocollo e la porta, oppure utilizzare il “formato di collegamento barra in avanti” e inserisci prima il numero di porta.

fuser -n tcp 7889 fuser 7889/udp

Il numero di porta, il protocollo e il PID del processo terminato vengono stampati nella finestra del terminale.

Prima prova il fusore

È 8217;probabilmente sarà installato sul computer su cui stai lavorando, ed è probabile che il protocollo sia TCP o UDP, quindi c'è una grande possibilità che il modo più semplice funzioni per te.

LEGGI SUCCESSIVO

  • › Come utilizzare la funzione IMMAGINE in Microsoft Excel
  • › Siamo nell'era delle fotocamere per smartphone da 200 MP
  • › Ecco tutto quello che non sapevi con dentro un Raspberry Pi
  • › Come rimuovere i bordi in Microsoft Word
  • › La nuova sedia di Cooler Master vibrerà con i tuoi giochi
  • › Modifica l'app della fotocamera dell'iPhone predefinita con questa automazione di collegamento