Een proces doden of een programma stoppen in Linux

Wanneer een proces zich misdraagt, wilt u het soms misschien beëindigen of doden. In dit artikel bespreken we een aantal manieren om een proces of een toepassing te beëindigen, zowel vanaf de opdrachtregel als vanuit een grafische interface, met gedit als voorbeeldtoepassing.

De opdrachtregel/beëindigingstekens gebruiken

Ctrl + C

Eén probleem bij het aanroepen van gedit vanaf de opdrachtregel (als u gedit & niet gebruikt) is dat de prompt niet wordt vrijgegeven, zodat de shellsessie wordt geblokkeerd. In zo’n geval komt Ctrl+C (de Control-toets in combinatie met ‘C’) van pas. Dat zal gedit beëindigen en al het werk zal verloren gaan (tenzij het bestand werd opgeslagen). Ctrl+C stuurt het SIGINT signaal naar gedit. Dit is een stop signaal waarvan de standaard actie is om het proces te beëindigen. Het instrueert de shell om gedit te stoppen en terug te keren naar de hoofdlus, en u krijgt de prompt terug.

$ gedit
^C

Ctrl + Z

Dit wordt een suspend karakter genoemd. Het stuurt een SIGTSTP signaal naar process. Dit is ook een stop signaal, maar de standaard actie is niet om het proces te doden maar om het op te schorten.

Het zal gedit stoppen (doden/beëindigen) en teruggaan naar de shell prompt.

$ gedit
^Z
+ Stopped gedit
$

Zodra het proces is opgeschort (in dit geval, gedit), is het niet mogelijk om te schrijven of iets te doen in gedit. Op de achtergrond wordt het proces een job. Dit kan worden gecontroleerd met het jobs commando.

$ jobs
+ Stopped gedit

jobs stelt u in staat om meerdere processen te besturen binnen een enkele shell sessie. U kunt naar behoefte jobs stoppen, hervatten en naar de achtergrond of voorgrond verplaatsen.

Laten we gedit op de achtergrond hervatten en een prompt vrijmaken om andere commando’s uit te voeren. U kunt dit doen met het bg commando, gevolgd door job ID (let op in de uitvoer van jobs hierboven. is de job ID).

$ bg 1
+ gedit &

Dit is vergelijkbaar met het starten van gedit met &,:

 $ gedit &

Door kill

kill te gebruiken, krijgt u fijne controle over signalen. U kunt een proces een signaal geven door ofwel een signaalnaam of een signaalnummer op te geven, gevolgd door een proces-ID, of PID.

Wat ik leuk vind aan kill is dat het ook kan werken met job ID’s. Laten we gedit op de achtergrond starten met gedit &. Ervan uitgaande dat ik een job ID van gedit heb van het jobs commando, laten we SIGINT naar gedit sturen:

 $ kill -s SIGINT %1

Noteer dat de job ID moet worden voorafgegaan door %, of kill zal het als een PID beschouwen.

kill kan werken zonder expliciet een signaal op te geven. In dat geval is de standaardactie het verzenden van SIGTERM, dat het proces zal beëindigen. Voer kill -l uit om alle signaalnamen op te sommen, en gebruik het man kill commando om de man page te lezen.

Gebruik killall

Als u geen job ID of PID wilt opgeven, kunt u met killall een proces bij naam opgeven. De eenvoudigste manier om gedit te beëindigen met killall is:

 $ killall gedit

Dit zal alle processen met de naam gedit doden. Net als kill, is het standaard signaal SIGTERM. Het heeft de optie om gevallen te negeren met -I:

$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit

Om meer te weten te komen over de verschillende vlaggen van killall (zoals -u, waarmee u processen in eigendom van een gebruiker kunt doden) raadpleegt u de man page (man killall)

Het gebruik van xkill

Heeft u ooit een probleem ondervonden waarbij een mediaspeler, zoals VLC, grijs werd of vastliep? Nu kunt u de PID vinden en de toepassing doden met een van de bovenstaande commando’s of met xkill.

xkill kunt u een venster doden met behulp van een muis. Voer xkill uit in een terminal, waardoor de muiscursor zou moeten veranderen in een x of een klein schedelicoontje. Klik op x op het venster dat u wilt sluiten. Wees echter voorzichtig met xkill-zoals de man pagina uitlegt, kan het gevaarlijk zijn. U bent gewaarschuwd!

Raadpleeg de man page van elk commando voor meer informatie. U kunt ook commando’s als pkill en pgrep onderzoeken.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.