Hoe een Linux-proces te beëindigen op poortnummer?

0
87
fatmawati achmad zaenuri/Shutterstock.com

Om een ​​Linux-proces te beëindigen heb je de ID of de naam nodig. Als alles wat je weet de poort is die het gebruikt, kun je het dan nog steeds doden? Ja, op verschillende manieren.

Vermoordprocessen

Af en toe kan een Linux-proces niet meer reageren. Het kan stoppen met correct werken, of het zou kunnen blijven werken, maar verzoeken om het af te sluiten negeren, of geheugen, CPU of netwerkbandbreedte gaan opslokken.

GERELATEERDProcessen uitschakelen vanaf de Linux-terminal

Wat uw motieven ook zijn, er zijn manieren om een ​​proces te beëindigen vanaf de Linux-opdrachtregel. De klassieke methode is om de opdracht kill te gebruiken met de proces-ID van het proces dat u wilt beëindigen. Het kill-commando heeft enkele naaste familieleden. Het pkill-commando doodt een proces op naam en killall doodt alle processen die het kan vinden en die een deel van een naam delen.

Als alles wat je weet over een proces is dat het een poort op je computer gebruikt, zijn er nog steeds manieren om het te identificeren en te doden. In netwerktermen is “port” kan een fysieke verbinding betekenen waarin u een kabel plaatst met een stekker aan het uiteinde, zoals een CAT5- of 6-netwerkkabel, of het kan een softwarepoort betekenen.

Een softwarepoort is het laatste onderdeel van een netwerkverbinding. Het IP-adres van een apparaat identificeert de computer of ander netwerkapparaat. De toepassingen in de computer gebruiken verschillende poorten. Deze bieden een ander niveau van granulariteit. Het netwerkverkeer is via het IP-adres op de juiste computer aangekomen en door poortadressering te gebruiken, kan het bij de juiste toepassing worden afgeleverd.

Het is alsof de post die bij een hotel aankomt, wordt gesorteerd en naar de juiste kamers gebracht. Het IP-adres is als het adres van het hotel en de kamernummers zijn als de poortnummers.

Als je netwerkactiviteit op een poort ziet en je herkent het proces dat het genereert niet, of het gedrag ervan is problematisch of verdacht, dan wil je misschien het proces beëindigen. Zelfs als je alleen het poortnummer weet, kun je het proces opsporen en beëindigen.

Verbindingen maken met socat

Dus dat we een aantal verbindingen moeten doden, zullen we socat gebruiken om netwerkverbindingen te maken met behulp van verschillende protocollen. U moet socat installeren. Gebruik deze opdracht om het op Ubuntu te installeren:

sudo apt install socat

Gebruik in Fedora dnf:

sudo dnf installeer socat

Op Manjaro moet je typen:

sudo pacman -S socat

< /p>

De syntaxis voor socat is eenvoudig, hoewel een beetje langdradig. We moeten de bron- en bestemmingsadressen opgeven. Voor elk van deze moeten we het protocol, het IP-adres en het poortnummer opgeven. We kunnen STDIN of STDOUT als bron of bestemming vervangen.

Dit commando maakt een verbinding tussen een TCP-luistersocket op poort 7889, op het loopback-IP-adres 127.0.0.1, en STDOUT. Het ampersand “&” voert de opdracht op de achtergrond uit, zodat we toegang tot de opdrachtregel behouden.

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

We zullen nog twee verbindingen maken, zodat we een kleine selectie sockets hebben die verschillende protocollen gebruiken. We maken een UDP-verbinding en een SCTP-verbinding. Het enige deel van de opdracht dat verandert, is het protocol.

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

GERELATEERD: Wat is het verschil Tussen TCP en UDP?

Kill gebruiken

Natuurlijk kunnen we kill gebruiken om het proces te beëindigen, zolang we maar weten wat de ID van het proces is. Om de PID te vinden, kunnen we de opdracht lsof gebruiken.

Om de details van het proces op poort 7889 weer te geven die het TCP-protocol gebruiken, gebruiken we de optie -i (internetadres), zoals deze.

lsof -i tcp:7889

De PID van dit proces is 3141, en we kunnen doorgaan en dat gebruiken met kill:

sudo kill 3141

We kunnen ons wat moeite besparen als we leidingen gebruiken. Als we de uitvoer van lsof naar awk pipen en awk vertellen om te zoeken naar regels die de poort bevatten waarin we geïnteresseerd zijn & #8212;7889" en het tweede veld van die regel afdrukken, isoleren we de PID.

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

We kunnen dan de uitvoer van awk in het kill-commando pipen met behulp van xargs. De opdracht xargs neemt de doorgesluisde invoer en geeft deze door aan een andere opdracht als opdrachtregelparameters. We gebruiken xargs met het kill-commando.

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

We krijgen geen visuele feedback. Op de typische Linux-manier is geen nieuws goed nieuws. Als je wilt controleren of het proces is beëindigd, kun je lsof nog een keer gebruiken.

lsof -i tcp:7889

Omdat lsof niets rapporteert, weten we dat zo'n verbinding niet bestaat.

We kunnen een proces met het UDP-protocol verwijderen door simpelweg “tcp” met “udp” in ons eerdere commando.

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

lsof herkent het SCTP-protocol echter niet.

lsof -i sctp:7889

We kunnen het ss-commando gebruiken om dat te doen. We gebruiken de -S (SCTP) optie om te zoeken naar SCTP-sockets, de -a (all) optie om te zoeken naar alle soorten sockets (luisteren, accepteren, verbonden, enz.), en de -p (processen ) optie om de details van het proces met behulp van de socket weer te geven.

ss -Sap

We kunnen die uitvoer ontleden met grep en awk . We kunnen het ook ontleden met grep en enkele PERL-regexen, maar op deze manier is het veel gemakkelijker te begrijpen. Als je dit meer dan een of twee keer zou gebruiken, zou je er waarschijnlijk een alias of shell-functie van maken.

We pipe de output van ss naar grep en zoeken naar ons poortnummer, 7889. We zullen de output van grep naar awk pipen. In awk gebruiken we de -F (scheidingstekenreeks) optie om een ​​komma in te stellen  “,” als veldscheidingsteken. We zoeken naar een tekenreeks die “pid=” bevat en drukken het tweede door komma's gescheiden veld van die tekenreeks af.

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

Dat heeft ons de string “pid=2859.”

We kunnen dat weer in awk pipen, het veldscheidingsteken instellen op het gelijkteken “=&#8221 ; en druk het tweede veld van die string af, wat de tekst achter het gelijkteken zal zijn.

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

We hebben nu de proces-ID geïsoleerd. We kunnen xargs gebruiken om de PID to kill door te geven als een opdrachtregelparameter.

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

Dat doodt het proces dat de SCTP-protocol-socket op poort gebruikte 7889.

Het fuser-commando

Het fuser-commando vereenvoudigt de zaken aanzienlijk. Het nadeel is dat het alleen werkt met TCP- en UDP-sockets. Positief is dat dit de twee meest voorkomende soorten sockets zijn waarmee u te maken zult krijgen. Het fuser-commando was al geïnstalleerd op de Ubuntu-, Fedora- en Manjaro-computers die we hebben gecontroleerd.

Het enige dat u hoeft te doen, is de optie -k (kill) gebruiken en de poort en het protocol opgeven. U kunt de optie -n (naamruimte) gebruiken en het protocol en de poort opgeven, of u kunt de “forward slash-snelkoppelingsindeling” en zet eerst het poortnummer.

fuser -n tcp 7889 fuser 7889/udp

Het poortnummer, het protocol en de PID van het beëindigde proces worden afgedrukt in het terminalvenster.

Probeer eerst fuser

Het is 8217;zal waarschijnlijk worden geïnstalleerd op de computer waaraan u werkt, en het protocol is waarschijnlijk TCP of UDP, dus de kans is groot dat de eenvoudigste manier voor u werkt.

LEES VOLGENDE

  • › De IMAGE-functie gebruiken in Microsoft Excel
  • › We bevinden ons nu in het tijdperk van 200 MP smartphonecamera's
  • › Hier is alles wat je niet wist dat er een Raspberry Pi in zat
  • › Randen verwijderen in Microsoft Word
  • › Cooler Master's nieuwe stoel zal trillen met je games
  • › Wijzig de standaard iPhone-camera-app met deze snelkoppelingsautomatisering