Het afbreken van een proces is soms de enige manier om er vanaf te komen. Ondanks de harde naam, betekent ‘doden’ een proces gewoon ‘het dwingen om te stoppen’. Hier leest u hoe u het doet vanaf de Linux- of macOS-opdrachtregel.
Wat is een proces?
Het uitvoeren van programma’s zoals uw webbrowser, achtergrondprocessen die zijn gekoppeld aan uw desktopomgeving en Linux-systeemservices zijn allemaal processen.
U kunt processen in twee groepen onderverdelen:
- Processen op de voorgrond zijn degenen die zijn gestart of gestart door een gebruiker. Ze kunnen zich in een terminalvenster bevinden of het kan een grafische toepassing zijn.
- Achtergrondprocessen zijn alle processen die automatisch worden gestart en geen interactie hebben met gebruikers. Ze verwachten geen input van gebruikers en presenteren ook geen resultaten of output aan hen. Achtergrondprocessen zijn zaken als services en daemons.
Als de voorgrondprocessen de voorkant van het theaterpersoneel en de acteurs zijn, zijn de achtergrondprocessen het backstage-team “achter de schermen”.
Wanneer processen zich misdragen of niet goed werken, kunnen ze te veel CPU-tijd in beslag nemen, uw RAM verbruiken of in een strakke rekenlus terechtkomen en niet meer reageren. Grafische applicaties kunnen weigeren te reageren op muisklikken. Terminal-applicaties zullen u mogelijk nooit terugbrengen naar de opdrachtprompt.
Het humane antwoord
Een proces ‘doden’ betekent gewoon ‘het proces dwingen te stoppen’. Dit kan nodig zijn als het proces weigert te reageren.
Linux biedt het kill
, pkill
, en killall
commando’s om precies dat te doen. Deze commando’s kunnen worden gebruikt met elk type proces, grafisch of commandoregel, voorgrond of achtergrond.
Het kill-commando
Gebruiken kill
, moet u de proces-ID (PID) kennen van het proces dat u wilt beëindigen. De ps
commando kan worden gebruikt om de PID van een proces te vinden.
Hebben ps
zoek door alle processen gebruik de -e
(alle processen) optie. Leiding van de output door less
is aan te raden, er komt er nogal wat van. Type ps
, een ruimte, -e
, een ruimte, |
(een pijp-teken), nog een spatie en typ dan less
. Druk op Enter om de opdracht uit te voeren.
ps -e | less
Dit geeft je een proceslijst die lijkt op de onderstaande schermafbeelding. U kunt vooruit zoeken in less
de … gebruiken /
toets en u kunt achteruit zoeken met de ?
sleutel.
Om in te gaan op het proces waarin u geïnteresseerd bent, gebruikt u de output van ps
door grep
en specificeer de naam – of een deel van de naam – van het proces.
ps -e | grep shutter
Zodra u de PID heeft gevonden van het proces dat u wilt beëindigen, geeft u deze door aan het kill
commando als parameter. Om het shutter
proces geïdentificeerd door het vorige commando, gebruik dan dit commando:
kill 2099
De kill
commando is een stille huurmoordenaar – het geeft je geen feedback als het succesvol was.
Het pkill Command
De pkill
commando stelt u in staat een proces – of processen – op naam te doden. U hoeft het proces niet aan de hand van PID te identificeren. Gebruiken pkill
u geeft een zoekterm op die pkill
gebruikt om te vergelijken met de lijst met actieve processen. Afstemmingsprocessen worden beëindigd. U moet er dus zeker van zijn dat u de zoekterm correct heeft gespeld.
Als vangnet kunt u de pgrep
opdracht voordat je gebruikt de pkill
opdracht. De pgrep
commando accepteert ook een zoekterm. Het toont de PID van elk proces dat overeenkomt met de zoekterm. Dit is veilig omdat pgrep
zal geen kill-signaal geven aan de processen, en als u de zoekterm verkeerd intypt, zult u niet per ongeluk een ander proces doden. U kunt ervoor zorgen dat u de zoekterm correct heeft uitgedacht voordat u deze doorgeeft pkill
. Beide pkill
en pgrep
behandel de zoekterm op dezelfde manier. Hun behandeling is zo vergelijkbaar dat ze dezelfde manpage delen.
Stel dat er een proces is met “subq” in zijn naam. We gebruiken de ps -u dave | grep
commando om een kijkje achter het gordijn te krijgen. U kunt zien dat “subq” overeenkomt met dat proces en dat proces alleen. Dat was alleen zodat u de volledige naam van het proces kunt zien.
ps -u dave | grep subq
Laten we aannemen dat onze gebruiker heeft niet gedaan; het enige wat ze weten is dat de procesnaam de substring ‘subq’ bevat. Ze gebruiken pgrep
om te controleren of er maar één overeenkomst is met de zoekterm. Ze gebruiken die zoekterm vervolgens met pkill
.
pgrep subq
pkill subq
Je kunt gebruiken pkill
om meerdere processen tegelijk te doden. Hier rent de gebruiker pgrep
om te controleren hoeveel processen Chrome heeft gestart. Ze gebruiken pkill
om ze allemaal te doden. Ze nemen dan contact op met pgrep
dat ze allemaal zijn verwijderd.
pgrep chrome
pkill chrome
pgrep chrome
Als er meerdere processen met dezelfde naam actief zijn, maar u wilt ze niet allemaal doden, kunt u pgrep
met de -f
(opdrachtregel) optie om te identificeren welk proces dat is. Een eenvoudig voorbeeld zijn er twee ping
processen. Je wilt een van hen doden, maar de ander niet. U kunt hun opdrachtregels gebruiken om ze van elkaar te onderscheiden. Let op het gebruik van aanhalingstekens om de opdrachtregelparameter te omsluiten.
pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"
Het killall-commando
Waarschuwing: In de besturingssystemen Solaris en OpenIndiana is het killall
commando zal dood alle processen die van jou zijn. Als het root is of als u heeft uitgegeven sudo killall
u zult uw computer opnieuw opstarten! Tijdens het onderzoek voor dit artikel werd dit gedrag bevestigd met de nieuwste versie van OpenIndiana Hipster 2018.10.
De killall
commando werkt op een vergelijkbare manier als het pkill
commando maar met een specifiek verschil. In plaats van een zoekterm door te geven aan de opdracht, moet u de exacte procesnaam opgeven.
U kunt geen gedeeltelijke overeenkomst opgeven voor een procesnaam; u moet de volledige procesnaam opgeven, zoals weergegeven:
killall shutt
killall shutter
De -y
(jonger dan) optie stelt u in staat om processen af te breken waarvoor minder dan een bepaalde periode. De periode wordt in cijfers weergegeven, gevolgd door een van deze eenheden:
- s (seconden)
- m (minuten)
- h (uren)
- d (dagen)
- w (weken)
- M (maanden, noot, hoofdletter “M”)
- y (jaar)
Om een proces genaamd ana
dat net is gelanceerd en laat alle oudere exemplaren van ana
draaiende, zou je de volgende parameters kunnen gebruiken met killall
, als je binnen twee minuten had gereageerd:
killall -y 2m ana
De -o
(ouder dan) optie stelt u in staat processen te beëindigen die al langer dan een bepaalde periode draaien. Dit commando zal alles doden ssh
verbindingen die al langer dan een dag actief zijn:
killall -o 1d sshd
Wees niet te triggergelukkig
Met deze commando’s kunt u foutieve processen nauwkeurig en veilig identificeren en beëindigen.
Wees altijd voorzichtig. Zorg er eerst voor dat het proces dat u gaat doden, echt het proces is dat u wilt. Ten tweede, dubbele controle: wees voorzichtig en verzeker u ervan dat het beoogde proces het proces is dat u wilt beëindigen. Ga door met het beëindigen van het proces als u tevreden bent.