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 is hoe je 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 slecht 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
doden
,
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
doden
, 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
-is
(alle processen) optie. Leiding van de output door
minder
is aan te raden, er komt er nogal wat van. Type
ps
, een ruimte,
-is
, een ruimte,
|
(een pijp-teken), nog een spatie en typ dan
minder
. Druk op Enter om de opdracht uit te voeren.
ps -e | minder
Dit geeft je een proceslijst die lijkt op de onderstaande schermafbeelding. U kunt vooruit zoeken in
minder
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
grip
en specificeer de naam - of een deel van de naam - van het proces.
ps -e | grip sluiter
Zodra u de PID heeft gevonden van het proces dat u wilt beëindigen, geeft u deze door aan het
doden
commando als parameter. Om het
Luik
proces geïdentificeerd door het vorige commando, gebruik dan dit commando:
dood 2099
De
doden
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 beëindigen. 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
deel dezelfde man-pagina
.
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; alles 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 chroom
pkill chroom
pgrep chroom
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
opdracht
werkt op een vergelijkbare manier
naar de
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 sluiter
De
-J
(jonger dan) optie stelt u in staat om processen af te breken waarvoor al actief is
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
moeder
dat net is gelanceerd en laat alle oudere exemplaren van
moeder
draaiende, zou je de volgende parameters kunnen gebruiken met
killall
, als je binnen twee minuten had gereageerd:
Verlaag mij of mij
De
-De
(ouder dan) optie stelt u in staat om 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 Trigger Happy
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.