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.