Hur man dödar en Linux-process efter portnummer

0
94
fatmawati achmad zaenuri/Shutterstock.com

För att döda en Linux-process behöver du dess ID eller dess namn. Om allt du vet är porten den använder, kan du fortfarande döda den? Ja, på flera olika sätt.

Dödande processer

Ibland kan en Linux-process sluta svara. Det kan sluta fungera korrekt, eller så kan det fortsätta att fungera men ignorera förfrågningar om att det ska stängas av, eller börja sluka minne, CPU eller nätverksbandbredd.

RELATERATHur man dödar processer från Linux-terminalen

Oavsett dina motiv finns det sätt att döda en process från Linux-kommandoraden. Den klassiska metoden är att använda kill-kommandot med process-ID för processen du vill avsluta. Avlivningskommandot har några nära släktingar. Kommandot pkill kommer att döda en process med namn, och killall kommer att döda alla processer som den kan hitta som delar en del av ett namn.

Om allt du vet om en process är att den använder en port på din dator, finns det fortfarande sätt att identifiera och döda den. När det gäller nätverk, “port” kan betyda en fysisk anslutning där du ansluter en kabel med en kontakt i änden, till exempel en CAT5- eller 6-nätverkskabel, eller så kan det betyda en mjukvaruport.

En mjukvaruport är den sista delen av en nätverksanslutning. En enhets IP-adress identifierar datorn eller annan nätverksenhet. Applikationerna inuti datorn använder olika portar. Dessa ger en annan nivå av granularitet. Nätverkstrafiken har anlänt till rätt dator med hjälp av IP-adressen, och genom att använda portadressering kan den levereras till rätt applikation.

Det är som post som kommer till ett hotell och sedan sorteras och levereras till lämpliga lokaler. IP-adressen är som hotellets gatuadress, och rumsnumren är som portnumren.

Om du ser nätverksaktivitet på en port och du inte känner igen processen som genererar den, eller om dess beteende är problematiskt eller misstänkt, kanske du vill avbryta processen. Även om allt du vet är portnumret kan du spåra processen och döda den.

Skapa anslutningar med socat

Så att vi har några anslutningar att döda, använder vi socat för att skapa nätverksanslutningar med olika protokoll. Du måste installera socat . För att installera det på Ubuntu, använd det här kommandot:

sudo apt install socat

På Fedora använd dnf:

sudo dnf install socat

På Manjaro måste du skriva:

sudo pacman -S socat

< /p>

Syntaxen för socat är enkel om den är lite långrandig. Vi måste ange käll- och destinationsadresser. För var och en av dessa måste vi ange protokoll, IP-adress och portnummer. Vi kan ersätta STDIN eller STDOUT som en källa eller destination.

Detta kommando skapar en anslutning mellan en TCP-lyssningssocket på port 7889, på loopback-IP-adressen 127.0.0.1, och STDOUT. Et-tecken “&” kör kommandot i bakgrunden, så att vi behåller åtkomst till kommandoraden.

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

Vi kommer att skapa ytterligare två anslutningar så att vi har ett litet urval av uttag som använder olika protokoll. Vi skapar en UDP-anslutning och en SCTP-anslutning. Den enda delen av kommandot som ändras är protokollet.

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

RELATERAT: Vad är skillnaden Mellan TCP och UDP?

Använda Kill

Naturligtvis kan vi använda kill för att avsluta processen, bara vi vet vad processens ID är. För att hitta PID kan vi använda lsof-kommandot.

För att lista detaljerna för processen på port 7889 som använder TCP-protokollet använder vi alternativet -i (internetadress), så här.

lsof -i tcp:7889

PID för denna process är 3141, och vi kan gå vidare och använda det med kill:

sudo kill 3141

Vi kan spara oss lite ansträngningar om vi använder rör. Om vi ​​skickar utdata från lsof till awk och säger åt awk att söka efter linjer som innehåller porten vi är intresserade av—7889—och skriver ut det andra fältet från den raden, isolerar vi PID.

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

Vi kan sedan skicka utdata från awk till kill-kommandot med hjälp av xargs. Kommandot xargs tar sin indata i pipeline och skickar den till ett annat kommando som kommandoradsparametrar. Vi använder xargs med kommandot kill.

lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs dödar

Vi får ingen visuell feedback. På det typiska Linux-sättet är inga nyheter goda nyheter. Om du vill kontrollera att processen har avslutats kan du använda lsof en gång till.

lsof -i tcp:7889

Eftersom lsof inte rapporterar någonting vet vi att det inte finns någon sådan anslutning.

Vi kan ta bort en process med UDP-protokollet genom att helt enkelt ersätta “tcp” med “udp” i vårt tidigare kommando.

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

Lsof känner dock inte igen SCTP-protokollet.

lsof -i sctp:7889

Vi kan använda kommandot ss för att göra det. Vi använder alternativet -S (SCTP) för att söka efter SCTP-uttag, alternativet -a (alla) för att söka efter alla typer av uttag (lyssnar, accepterar, anslutna, etc.) och -p (processer) ) för att lista detaljerna för processen med hjälp av sockeln.

ss -Sap

Vi kan analysera den utgången med grep och awk. Vi skulle också kunna analysera det med grep och vissa PERL-regexes, men det här sättet är mycket lättare att förstå. Om du skulle använda det här mer än en eller två gånger skulle du förmodligen skapa en alias- eller skalfunktion av det.

Vi skickar utdata från ss till grep och söker efter vårt portnummer, 7889. Vi skickar utdata från grep till awk. I awk använder vi alternativet -F (separatorsträng) för att sätta ett kommatecken  “,” som fältavgränsare. Vi söker efter en sträng som innehåller “pid=”, och skriver ut det andra kommaavgränsade fältet från den strängen.

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

Det har gett oss strängen “pid=2859.”

Vi kan flytta det till awk igen, ställ in fältavgränsaren till likhetstecknet “=&#8221 ; och skriv ut det andra fältet från den strängen, som kommer att vara texten bakom likhetstecknet.

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

Vi har nu isolerat process-ID:t. Vi kan använda  xargs för att skicka PID för att döda som en kommandoradsparameter.

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

Det dödar processen som använde SCTP-protokollsocket på porten 7889.

Fixeringskommandot

Kommandot fuser förenklar saker och ting mycket. Nackdelen är att den bara fungerar med TCP- och UDP-uttag. På plussidan är det de två vanligaste typerna av uttag som du behöver hantera. Fixeringskommandot var redan installerat på Ubuntu-, Fedora- och Manjaro-datorerna vi kontrollerade.

Allt du behöver göra är att använda alternativet -k (kill) och tillhandahålla porten och protokollet. Du kan antingen använda alternativet -n (namnutrymme) och tillhandahålla protokollet och porten, eller använda “formatet för snedstreck genvägar framåt” och sätt portnumret först.

fuser -n tcp 7889 fuser 7889/udp

Portnumret, protokollet och PID för den avslutade processen skrivs ut i terminalfönstret.

Prova fixeringsenheten först

Det 8217;kommer förmodligen att installeras på den dator du arbetar på, och protokollet är troligen TCP eller UDP, så det finns en stor chans att det enklaste sättet kommer att fungera för dig.

LÄS NÄSTA

  • › Så här använder du IMAGE-funktionen i Microsoft Excel
  • › Vi är nu i en ålder av 200 MP smartphonekameror
  • › Här är allt du inte visste hade en Raspberry Pi i sig
  • › Hur man tar bort gränser i Microsoft Word
  • › Cooler Master’s nya stol kommer att vibrera med dina spel
  • › Ändra standardappen för iPhone-kamera med denna genvägsautomatisering