A-Z-opdrachten

Een Linux-proces doden of beëindigen De ultieme gids The

Een Linux-proces doden of beëindigen De ultieme gids The

Multiprocessing-besturingssystemen zoals Linux en BSD's gebruiken verschillende methoden om het CPU-gebruik te maximaliseren. Een proces is gewoon een programma in uitvoering. Aangezien er meer dan één Linux-proces tegelijkertijd wordt uitgevoerd, is procesbeheer in Linux uiterst cruciaal. Gebruikers hebben vaak te maken met problemen zoals CPU-resourcebeperking bij het uitvoeren van te veel programma's. Situaties als deze ontstaan ​​wanneer de CPU het groeiende aantal processen niet aankan. Hoewel dit niet volledig afhankelijk is van de kracht van je CPU, kan het omgaan met hangende of zombieprocessen behoorlijk frustrerend zijn. Om u te helpen dergelijke voorvallen te beperken, schetsen we enkele standaardmanieren om deze processen te beëindigen.

Beheers niet-reagerend procesbeheer in Linux


Je leert verschillende manieren om een ​​Linux-proces te beëindigen dat helemaal niet reageert. Als je van Windows komt, ben je misschien bekend met Ctrl+Alt+Delete. Op dezelfde manier hebben Mac-gebruikers de Command+Option+Escape-methode om bevroren processen te doden. Linux is veel veelzijdiger dan zijn tegenhangers en biedt meer dan één methode om dode/niet-reagerende processen aan te pakken.

Verschillende methoden om een ​​dood Linux-proces te doden


We zullen voornamelijk twee methoden schetsen voor het doden van zombieprocessen:. We gebruiken de Linux-terminal voor de eerste methode. Hiervoor moeten we eerst de proces-ID identificeren. Eenmaal succesvol verkregen, kunnen we deze PID gebruiken om het programma te doden door specifieke signalen naar die PID te sturen.

Je leert ook hoe je dergelijke Linux-kill-taken uitvoert vanuit de grafische gebruikersinterface of het X-venster. We gaan gebruik maken van de 'Systeemmonitor' applicatie hiervoor beschikbaar in Ubuntu. Hoewel dit een GNOME-toepassing is, zijn vergelijkbare tools beschikbaar voor andere Linux-desktopomgevingen.

Een niet-reagerend proces beëindigen vanaf de opdrachtregel


Er zijn verschillende hulpmiddelen voor het beëindigen van een niet-reagerend of vastgelopen proces vanaf de opdrachtregel, waaronder: doden, pkill, en killall. Deze opdrachten werken door specifieke signalen naar deze niet-reagerende processen te sturen. Je hebt de proces-ID nodig of PID informatie zodat u ze het vereiste afsluitsignaal kunt sturen.

De PID of proces-ID is een uniek nummer dat een proces identificeert. Deze worden tijdens runtime door de Linux-kernel gemaakt en de procesplanner regelt hun CPU-activiteiten. Dus telkens wanneer u een toepassing aanroept, zal de kernel eerst de nodige processen spawnen en deze unieke PID-waarden toewijzen. Er kunnen meerdere PID's aan een proces zijn gekoppeld. Bovendien heeft elk proces een enkel ouderproces met een unieke PPID (Parent Process ID).

Dus als u deze PPID kunt achterhalen, kunt u een kill-signaal verzenden met programma's die voor dit doel zijn ontworpen. Hieronder leert u hoe u actieve processen in Linux kunt controleren en hun PPID kunt identificeren vanaf de terminal.

Ontdek de PPID-informatie


U kunt de PPID van een proces achterhalen met behulp van verschillende procesbeheeropdrachten in Linux, zoals: pidof, pstree, en pgrep. Laten we ze een voor een bekijken en kijken hoe we de PID van een Linux-proces kunnen verkrijgen.

Methode 1: Het ps-commando gebruiken


De opdracht ps in Linux geeft alle lopende processen weer naast andere procesgerelateerde informatie zoals de PID in de terminal the. We kunnen deze opdracht gebruiken om alle processen weer te geven en vervolgens een specifiek proces eruit filteren met behulp van Linux grep-opdrachten command. Het zou ons de proces-ID-informatie moeten tonen waarin we geïnteresseerd zijn.

$ nano > /dev/null &
$ ps aux | grep "nano"

Ten eerste hebben we een Linux-teksteditor op de achtergrond aangeroepen. Vervolgens hebben we het ps-commando naast het grep-commando gebruikt om de PPID van deze editor te achterhalen. De uitvoer kan verschillende proces-ID's bevatten, maar we zijn alleen geïnteresseerd in de eerste omdat dat onze PPID is. We kunnen ook de Linux awk-opdracht gebruiken om deze informatie te achterhalen, zoals hieronder wordt aangetoond:.

$ ps aux | awk '/nano/ print $2'

Dit commando is flexibeler omdat het alle irrelevante informatie onderdrukt. Het toont alleen de PPID-informatie waarnaar we op zoek zijn.

Methode 2: De pstree-opdracht gebruiken


De opdracht pstree geeft ons een boomstructuur van alle lopende processen. Het biedt een grafische weergave van de Linux-takenlijst vanuit het terminalvenster. Met deze opdracht kunt u zowel de PPID als alle PID-informatie van een proces bekijken:. Bekijk de onderstaande voorbeelden om te leren hoe u pstree kunt gebruiken om de PPID van een specifiek proces te vinden.

$ nano > /dev/null &
$ pstree -p | grep 'nano' $ pstree -p | awk '/nano/ print $NF'

Ten eerste hebben we een proces op de achtergrond voortgebracht door het eerste commando te gebruiken:. De tweede opdracht haalt vervolgens de PPID van dit proces op met behulp van de grep-opdracht in Linux. Ten slotte laat het derde commando ons zien hoe we deze waarde kunnen ophalen met het awk-commando.

Methode 3: De pgrep-opdracht gebruiken


De pgrep-opdracht is een van de gemakkelijkste procesbeheeropdrachten in Linux. Het controleert de lijst met alle lopende processen en drukt de PPID van een bepaald proces af in de standaarduitvoer of de terminal in ons geval. Het werkt door regex-matching uit te voeren en is uitermate geschikt voor het schrijven van Linux-shellscripts.

$ nano > /dev/null &
$ pgrep 'nano'

We hebben het nano-proces op dezelfde manier voortgebracht als de eerdere voorbeelden. Dan hebben we zijn PPID verkregen door het pgrep-commando te gebruiken. Zodra we deze waarde hebben verkregen, kunnen we de Linux-kill-taak heel gemakkelijk uitvoeren.

Methode 4: Het pidof-commando gebruiken


Het pidof-commando is een andere eenvoudige maar nuttige manier om de PPID van een Linux-proces te bepalen. Het toont zowel de PPID als alle andere PID's die aan een proces zijn gekoppeld. Bekijk het onderstaande onderzoek om te zien hoe u dit in de praktijk kunt gebruiken.

$ nano > /dev/null &
$ pidof nano $ pidof -s nano

Als je het pidof-commando gebruikt om lopende processen in Linux te controleren, zie je vaak meerdere PID's see. Meestal is in dergelijke gevallen het eerste of het laatste getal de PPID, afhankelijk van of ze in oplopende of in aflopende volgorde staan. U kunt de -zo optie van pidof om dit te verminderen. Het zal alleen de PPID-waarde weergeven.

Methode 5: De bovenste opdracht gebruiken


De opdracht top biedt een realtime overzicht van alle lopende processen in Unix-achtige besturingssystemen. U kunt dit gebruiken om de Linux-takenlijst in uw terminal weer te geven en de PID-informatie van een specifiek proces te achterhalen.

$ top

Gebruik de volgende opdrachten om de PPID van een bepaald proces op te halen uit de uitvoer van de opdracht top:.

$ nano > /dev/null &
$ top -n1 -b | grep 'nano' $ top -n1 -b | awk '/nano/ print $1'

Omdat top realtime uitvoer levert in plaats van statische gegevens naar de terminal te dumpen, hebben we de -n1 en -b optie om de statische uitvoer af te drukken. Vervolgens kunt u de PPID-informatie ophalen met het grep-commando of het awk-commando in Linux in.

Dood het niet-reagerende Linux-proces


U kunt elk van de bovenstaande methoden gebruiken om de PPID van het niet-reagerende proces op te halen. Zodra je dit hebt verkregen, is het tijd om het proces helemaal te beëindigen. Er zijn verschillende commando's waarmee we dit kunnen doen, zoals: doden, pkill, en killall. We zullen zien hoe ze één voor één werken in de volgende secties:.

Methode 1: Het kill-commando gebruiken


Het kill-commando wordt veel gebruikt door Linux-beheerders vanwege zijn eenvoud en robuuste acties. Het neemt de PID van het proces en een signaal. De kernel doodt/stopt de uitvoering van het proces op basis van dit signaal. U kunt het volgende commando gebruiken om alle beschikbare signalen voor het kill-commando te bekijken.

$ kill -l

Zoals je kunt zien, biedt kill 64 verschillende signalen. In deze gids zullen we er echter slechts twee bespreken. Dit zijn sein 9(SIGKILL) en sein 15(SIGTERM). SIGTERM of signaal 15 is de veilige methode om een ​​niet-reagerend proces te doden. SIGKILL of signaal 9, aan de andere kant, doodt een Linux-proces met geweld.

$ doden -9 8631 $ doden -KILL 8631

De bovenstaande commando's zijn equivalent, en ze zullen het proces met de PID 8631 . geforceerd doden. Dat is de PPID van het proces 'nano' in mijn systeem. Vervang dit door de PID van het niet-reagerende proces in uw systeem.

$ kill -15 8631 $ kill -TERM 8631

De bovenstaande commando's zijn ook equivalent en zullen het proces gracieus doden. Daarom kan het enige tijd duren voordat het proces wordt afgebroken. Bovendien moet u mogelijk toevoegen sudo vóór het kill-commando als het proces eigendom is van een andere gebruiker.

Methode 2: Het pkill-commando gebruiken


Het pkill-commando is een van de meest veelzijdige procesbeheercommando's in Linux. Het stelt ons in staat om een ​​niet-reagerend proces te beëindigen op basis van de naam, PID, eigenaar en andere runtime-kenmerken. Het is een perfect hulpmiddel voor beginnende gebruikers of mensen die niet bekend zijn met veel standaard terminalopdrachten.

$ pkill nano $ pkill 8631 $ pkill -e nano $ pkill -f nano

Je kunt elk van de bovenstaande pkill-commando's gebruiken voor het doden van een zombie/niet-reagerend proces in Linux. Gebruik de -e optie als je een bevestiging wilt van de Linux-kill-taak. Met het pkill-commando kunnen gebruikers ook specifieke beëindigingssignalen verzenden.

Methode 3: Het killall-commando gebruiken


Met de opdracht killall kunnen gebruikers niet-reagerende processen doden op basis van hun naam. Het is gemakkelijker te gebruiken, maar kan problemen opleveren als u niet voorzichtig bent. Omdat killall processen beëindigt op basis van namen, is er altijd een kans dat je per ongeluk een proces doodt. Als er bijvoorbeeld verschillende versies van nano beschikbaar zijn in uw systeem, zal het eerste voorbeeld ze allemaal doden.

$ killall nano $ killall --verbose nano $ killall --interactieve nano $ killall --signaal KILL nano

Het eerste voorbeeld toont het basisgebruik van het commando killall in Linux. De tweede opdracht meldt of de kill-opdracht is geslaagd of niet, en de derde opdracht zal de gebruiker om bevestiging vragen voordat het proces wordt afgebroken. Killall gebruikt standaard het SIGTERM-signaal voor het doden van processen. U kunt het signaal echter handmatig specificeren, zoals weergegeven in het laatste voorbeeld.

Methode 4: Handige oneliners gebruiken


De ware schoonheid van Linux ligt in het feit dat het gebruikers in staat stelt om geavanceerde commandocombinaties te creëren op basis van hun behoeften. Om dit aan te tonen, hebben we een paar oneliners in de sectie geschetst:.

$ nano > /dev/null &
$ kill -9 $(pgrep nano) $ ps aux | grep -e 'nano' | awk 'print $2' | xargs doden -9

In het eerste voorbeeld hebben we shell-interpolatie gebruikt om de PID van het proces 'nano' door te geven aan het Linux kill-commando. Het tweede voorbeeld maakt gebruik van verschillende alledaagse terminalopdrachten en I/O-omleiding om het proces te beëindigen. Je kunt je eigen handige oneliners samenstellen als je eenmaal vertrouwd bent met de Linux-terminal.

Methode 5: Schakel meerdere processen uit met Linux Shell-scripts


Soms willen gebruikers meer dan één proces beëindigen. We kunnen dergelijke taken eenvoudig automatiseren door eenvoudige shellscripts te schrijven. Als je geïnteresseerd bent in dit onderwerp, bekijk dan onze vorige gids over Linux-shellscripts. Het volgende script haalt de PPID op van de processen die u wilt doden en beëindigt ze vervolgens met behulp van kill-signalen.

$ nano proc-killer.sh
#!/usr/bin/env bash voor pro in "$@" do pid=$(pgrep $pro | head -1) echo $pid comm="kill -9 $pid" eval $comm klaar

Sla dit bestand nu op en voeg uitvoeringstoestemming toe door het onderstaande commando uit te voeren:.

$ chmod +x proc-killer.sh

U kunt dit script nu de naam doorgeven van de processen die u wilt beëindigen.

$ ./proc-killer.sh nano gedit vlc

Vervang eenvoudig de argumenten door de namen van de niet-reagerende Linux-processen in uw systeem.

Een niet-reagerend proces beëindigen vanuit de GUI


U kunt een niet-reagerend proces ook beëindigen vanuit de grafische gebruikersinterface of het X-venster. We bespreken twee methoden om dit te doen in de volgende sectie:.

Methode 1: De xkill-toepassing gebruiken


Moderne Linux-distributies maken gebruik van het grafische X-venster om gebruikers een elegante grafische ervaring te bieden. Er is een eenvoudige tool genaamd xkill waarmee gebruikers een niet-reagerend GUI-venster kunnen sluiten. Het is mogelijk omdat in Linux het titelvenster van een applicatie los staat van de applicatie zelf.

Ga gewoon naar je Linux-terminalemulator en typ xkill. Het transformeert je muiscursor in een X-knop, die kan worden gebruikt om elk GUI-venster te doden.

$ xkill

Nu hoeft u alleen maar op de vensterbalk van de niet-reagerende toepassing te klikken, en deze zal worden uitgeschakeld en onmiddellijk verdwijnen.

Methode 2: De System Monitor-toepassing op Ubuntu gebruiken


De meeste reguliere Linux-distributies worden geleverd met een soort GUI-bewakingstools waarmee gebruikers een vastgelopen Linux-proces grafisch kunnen beëindigen. Met de toepassing Systeemmonitor op Ubuntu kunnen we bijvoorbeeld een niet-reagerend proces op een intuïtieve manier beëindigen. U kunt eenvoudig het dode proces uit de proceslijst selecteren en het doden door met de rechtermuisknop op het proces te klikken en de optie doden te selecteren.

Er zijn veel meer alternatieven voor deze applicatie, en we zijn er zeker van dat u er gemakkelijk een kunt vinden voor uw distributie- of desktopomgeving.

Gedachten beëindigen


Omdat procesbeheer in Linux erg veelzijdig is, raken gebruikers vaak gefrustreerd als ze te maken hebben met niet-reagerende processen. Daarom hebben onze redacteuren in deze handleiding alle mogelijke manieren geschetst om een ​​dood Linux-proces te beëindigen. Nadat je dit hebt gelezen, zou je in staat moeten zijn om alle niet-reagerende processen te beëindigen vanaf de opdrachtregel of vanuit de GUI. U kunt ook een van onze one-liner-opdrachten gebruiken om dergelijke overlast in de kortst mogelijke tijd op te lossen. Bovendien kunt u zelfs meer dan één enkel proces doden door ons eenvoudige shellscript te gebruiken. Dus hopelijk heb je de informatie die je zocht uit onze gids gehaald.

Vulkan voor Linux-gebruikers
Met elke nieuwe generatie grafische kaarten zien we game-ontwikkelaars de grenzen van grafische betrouwbaarheid verleggen en een stap dichter bij foto...
OpenTTD versus Simutrans
Je eigen transportsimulatie maken kan leuk, ontspannend en buitengewoon aanlokkelijk zijn. Daarom moet je ervoor zorgen dat je zoveel mogelijk spellen...
OpenTTD-zelfstudie
OpenTTD is een van de meest populaire simulatiegames voor bedrijven die er zijn. In dit spel moet je een geweldig transportbedrijf creëren. U begint e...