Processen beëindigen vanaf de Linux-terminal

Gestileerde Linux-terminal met Ubuntu-thema
Fatmawati Achmad Zaenuri / Shutterstock.com

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

ps commando in een terminalvenster

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.

output van ps in een minder venster

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

ps commando door grep om het sluiterproces te vinden

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

kill-commando in een terminalvenster

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

ps commando in een terminalvenster

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

pgrep en pkill in een terminalvenster

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

pgrep en pkill in een terminalvenster

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"

pgrep pkill met ping-opdrachtregel

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

killall commando in een terminalvenster

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

killall met jonger dan optie

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

killall commando in een terminalvenster

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.

Nieuwste artikelen

spot_img

Related Stories

Leave A Reply

Vul alstublieft uw commentaar in!
Vul hier uw naam in