Boolean wereld

linux kill cover image

In een besturingssysteem zijn er veel programma ‘ s, die door een gebruiker of door het besturingssysteem zelf kunnen worden uitgevoerd (zoals systeemservices). Dergelijke programma ‘ s die op het systeem worden uitgevoerd, worden “processen”genoemd. Meestal, een proces eindigt op zijn eigen wanneer ze klaar zijn met hun taak, of wanneer u hen vraagt om te stoppen door te drukken op een sneltoets of te klikken op de knop “Sluiten”.

echter, soms kan een proces ophangen of veel CPU of RAM gebruiken. In deze situatie, je zou willen handmatig “doden” het proces. In dit artikel zullen we kijken naar verschillende tools die je kunt gebruiken om processen op een Linux systeem te doden.

lokaliseren van het te doden proces

om een proces te doden, moet u eerst de details van het proces vinden. U kunt dit doen door middel van drie commando ‘ s — toppspidof en pgrep. Afhankelijk van de situatie, kunt u een van deze commando ‘ s te gebruiken voor dit doel.

zoals we later in dit artikel zullen zien, kunt u een proces doden door zijn naam of zijn proces-ID (PID). De PID is een getal dat een proces uniek identificeert. Killing by the process ID is handig als je alleen een specifiek proces wilt doden. Aan de andere kant is het doden door de procesnaam handig als je alle draaiende instanties van een bepaald programma wilt doden.

het proces lokaliseren met het bovenste Commando

We zullen eerst kijken naar het top Commando. Start het commando top door te typen:

top

u krijgt een interactieve interface, zoals hieronder getoond. Je kunt door deze lijst bladeren om de naam of de PID van het proces te vinden dat je wilt doden.

het bovenste commando dat een lijst met processen toont.

om door deze lijst te bladeren, kunt u de Omhoog/omlaag toetsen gebruiken. Bovendien, de top commando heeft ook manieren om processen te filteren op CPU-gebruik, gebruiker en proces Namen, die u kunt lezen over in deze gids.

de meest linkse kolom bevat de PID van het proces, en de rechterkant bevat de programmanaam. Als voorbeeld, in de bovenstaande schermafbeelding hebben we het vnstatd proces dat draait met een proces ID van 263.

Lokaliseren van het proces met de ps en grep commando ‘ s

een Andere manier om een overzicht te krijgen van het proces is door het uitvoeren van:

ps aux

In het bovenstaande commando, hebben we de flags aux die hebben de volgende betekenis:

  • a: Toon processen voor alle gebruikers
  • u: Weergave van de gebruiker die het proces
  • x: Toon alle processen. (Zonder dit zal ps geen processen tonen die draaien in een GUI-omgeving.)

de uitvoer van het commando is vergelijkbaar met die van top. De PID is beschikbaar in de tweede kolom van links, en de procesnaam is beschikbaar in de meest rechtse kolom.

de resultaten van het" ps aux " Commando."ps aux" command.

het voordeel van het gebruik van ps is dat u deze lijst eenvoudig kunt filteren met de opdracht grep. Om bijvoorbeeld een proces te vinden dat geassocieerd is met de term “vnstat”, kunt u gebruik maken van:

ps aux | grep -i vnstat

filterprocessen met PS en grep, met een positief resultaat.

hier kregen we twee resultaten — hetvnstatd proces, evenals hetgrep proces. Omdat we op zoek waren naar alle instanties van de term “vnstat”, en we ook grep draaiden met “vnstat” als argument, kregen we ook grep in de resultaten.

dus, zelfs als er geen “vnstat” gerelateerde processen draaien, zouden we één regel krijgen die de grep proces:

Filterprocessen met ps en grep toont.

dus, hoewel we een resultaat hebben, zijn er geen processen die voor ons interessant zijn.

het vinden van de PID met pidof en pgrep

met de combinatie top en psgrep kunnen we naar processen zoeken. Aan de andere kant, als je de exacte naam van een proces weet, kun je pidof gebruiken om de PID te vinden.

het gebruik van pidof is vrij eenvoudig. Om de PID ‘ s van een proces met de exacte naam van “nginx” te krijgen, gebruik je:

pidof nginx

als er processen zijn met de exacte naam van “nginx”, krijg je een lijst met PID ‘ s, zoals hieronder getoond. Als er geen zijn, krijg je niets als de output.

het pidof Commando

Als u de volledige naam niet kent, kunt u pgrep gebruiken in plaats van pidof. Als voorbeeld, om te zoeken naar alle processen die “ngin” ergens in hun naam bevatten, voer je uit:

pgrep ngin

Dit zal processen matchen met de exacte naam van “nginx”, evenals elk ander proces dat aan dezelfde criteria voldoet. Voor ons systeem, merk op dat we alle PID ‘ s die toebehoorden aan “nginx” in de bovenstaande screenshot.

het commando pgrep.

de opdrachten pidof enpkill geven u veel minder informatie. Zoals we in de volgende sectie zullen zien, zijn er omstandigheden waarin je een proces niet kunt doden. De uitvoer van top en ps bevat aanvullende informatie die u helpt te bepalen of u een proces echt kunt afbreken.

welke processen kunt u afsluiten?

nu we het proces gevonden hebben, is het tijd om het te stoppen. Echter, voordat we leren hoe dit te doen, zijn er een paar dingen die je moet weten.

als u een normale gebruiker bent, kunt u uw eigen processen doden, maar niet die van andere gebruikers. Zowel top als ps tonen de gebruiker waaronder een proces draait. In het geval van top bevat de tweede kolom de gebruikersnaam. Met ps aux bevat de eerste kolom de gebruikersnaam.

een root gebruiker kan echter alle processen afbreken. U kunt of sudo toevoegen voordat een commando wordt uitgevoerd als root, of een root shell verkrijgen door su te typen, en vervolgens het commando uit te voeren.

In Linux, wanneer een proces wordt uitgeschakeld, wordt een “terminating signal” aan het proces geleverd. Hoewel er veel verschillende soorten signalen zijn, hebben we meestal te maken met de “SIGTERM” en “SIGKILL” signalen. Ze hebben een numerieke waarde van respectievelijk 15 en 9. Standaard gebruiken alle process killing commando ‘s” SIGTERM”, waardoor het programma enige code kan draaien voordat het wordt afgesloten, waardoor het”gracieus” kan beëindigen. Als je het proces met geweld wilt beëindigen, kun je in plaats daarvan “SIGKILL” gebruiken.

De Linux kernel onderhoudt enige informatie met betrekking tot de status van een proces. Wanneer een proces wordt beëindigd, moet de kernel de informatie rondhouden, zodat het ouderproces kan achterhalen of het dochterproces in staat was om zijn taken te voltooien en of het op zichzelf is beëindigd, of dat het is gedood. Totdat de ouder dit heeft gedaan, zullen deze” zombie ” processen verschijnen in de lijst met processen. Je kunt zo ‘ n proces niet doden omdat het slechts een vermelding is in de lijst van alle processen, en het heeft geen echt proces dat ermee verbonden is.

wanneer een proces invoer/uitvoerbewerkingen uitvoert (zoals lezen van of schrijven naar schijven), wordt gezegd dat het zich in een staat van “uninterruptible sleep”bevindt. Je kunt een proces niet doden terwijl het in deze staat is.

u kunt zien of een proces in de “zombie”(Z) of “uninterruptible sleep”(D) staat door te kijken naar de 8e kolom van de topps uitvoer.

een proces afbreken

Er zijn verschillende commando ‘ s die u kunt gebruiken om een proces te doden — killkillallpkill en top. We beginnen met de eenvoudigste: het killall Commando.

Killing processen met het killall Commando

hetkillall commando is een van de makkelijkste manieren om een proces te doden. Als je de exacte naam van een proces Weet, en je weet dat het niet draait als een andere gebruiker en het is niet in de Z of D Staten, dan kun je dit commando direct gebruiken; het is niet nodig om het proces handmatig te lokaliseren zoals we hierboven beschreven.

standaard, bijvoorbeeld, om een proces genaamd “firefox” te doden, voer je uit:

killall firefox

om het proces met SIGKILL te stoppen, voer je uit:

killall -9 firefox

u kunt ook -SIGKILL gebruiken in plaats van -9.

Als u processen interactief wilt afbreken, kunt u -i als volgt gebruiken:

killall -i firefox

Als u een proces wilt afbreken dat als een andere gebruiker wordt uitgevoerd, kunt u sudo:

sudo killall firefox

u kunt ook een proces dat al een bepaalde periode draait met de -o en -y uitschakelen. Dus, als je een proces wilt afbreken dat langer dan 30 minuten draait, gebruik dan:

killall -o 30m <process-name>

als je een proces wilt afbreken dat minder dan 30 minuten draait, gebruik dan:

killall -y 30m <process-name>

evenzo gebruik je de volgende afkortingen voor de respectieve tijdseenheden:

s seconds
m minutes
h hours
d days
w weeks
M months
y years

Killing processes with the pkill command

Sometimes, you only know part of a program’s name. Net als pgrep, maakt pkill het mogelijk om processen te doden op basis van gedeeltelijke overeenkomsten. Bijvoorbeeld, als u alle processen die de naam apache in de naam wilt stoppen, voert u:

pkill apache

Als u een SIGKILL wilt gebruiken in plaats van een SIGTERM, gebruikt u:

pkill -9 apache

opnieuw, u kunt ook in plaats van -9.

Killing processen met het kill commando

het gebruik van het kill commando is eenvoudig. Als je eenmaal de PID van het proces hebt gevonden dat je wilt doden, kun je het beëindigen met het kill Commando. Als je bijvoorbeeld een proces met een PID van 1234 wilt stoppen, gebruik dan het volgende commando:

kill 1234

zoals we eerder al zeiden, is de standaard het gebruik van een SIGTERM. Om een SIGKILL te gebruiken, Gebruik je -9 of -SIGKILL zoals we eerder hebben gezien:

kill -9 1234

Killing processen met het bovenste Commando

Het is heel eenvoudig om processen te doden met behulp van top Commando. Zoek eerst naar het proces dat je wilt doden en noteer de PID. Druk vervolgens op k terwijl top draait (dit is hoofdlettergevoelig). Het zal je vragen om de PID in te voeren van het proces dat je wilt doden.

nadat u de PID invoert, drukt u op enter. Nu zal het vragen welk signaal je wilt gebruiken om het proces te stoppen. Als u SIGTERM(15) wilt gebruiken, druk dan gewoon op enter omdat dit het standaardsignaal is. Als je SIGKILL(9) wilt gebruiken, typ dan 9 en druk op enter.

Als u het proces-ID leeg laat en direct op enter drukt, wordt het bovenste proces in de lijst beëindigd. U kunt scrollen met behulp van de pijltjestoetsen, en verander het proces dat u wilt doden op deze manier.

conclusie

in dit bericht zagen we de verschillende manieren om processen in Linux te doden. Het leren van deze commando ‘ s is essentieel voor een goed systeembeheer en-beheer. Als je meer van die commando ‘ s wilt verkennen, kijk dan eens naar hun respectievelijke manpages.

Als u dit bericht leuk vindt, deel het dan 🙂

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.