Zoeken op website

Alles wat u moet weten over processen in Linux [Uitgebreide gids]


In dit artikel zullen we de basiskennis van processen doornemen en kort bekijken hoe we processen in Linux kunnen beheren met behulp van bepaalde opdrachten.

Een proces verwijst naar een programma dat wordt uitgevoerd; het is een actief exemplaar van een programma. Het bestaat uit de programma-instructie, gegevens die worden gelezen uit bestanden, andere programma's of invoer van een systeemgebruiker.

Soorten processen

Er zijn fundamenteel twee soorten processen in Linux:

  • Voorgrondprocessen (ook wel interactieve processen genoemd) – deze worden geïnitialiseerd en gecontroleerd via een terminalsessie. Met andere woorden: er moet een gebruiker op het systeem zijn aangesloten om dergelijke processen te starten; ze zijn niet automatisch gestart als onderdeel van de systeemfuncties/diensten.
  • Achtergrondprocessen (ook wel niet-interactieve/automatische processen genoemd) – zijn processen die niet verbonden zijn met een terminal; ze verwachten geen input van de gebruiker.

Wat is Daemons

Dit zijn speciale soorten achtergrondprocessen die beginnen bij het opstarten van het systeem en voor altijd als een service blijven draaien; ze gaan niet dood. Ze worden spontaan gestart als systeemtaken (uitgevoerd als services). Ze kunnen echter door een gebruiker worden beheerd via het init-proces.

Creëren van processen in Linux

Normaal gesproken wordt een nieuw proces gemaakt wanneer een bestaand proces een exacte kopie van zichzelf in het geheugen maakt. Het onderliggende proces heeft dezelfde omgeving als het bovenliggende proces, maar alleen het proces-ID-nummer is anders.

Er zijn twee conventionele manieren om een nieuw proces in Linux te creëren:

  • De functie System() gebruiken – deze methode is relatief eenvoudig, maar is inefficiënt en brengt aanzienlijke veiligheidsrisico's met zich mee.
  • De functie fork() en exec() gebruiken – deze techniek is een beetje geavanceerd, maar biedt meer flexibiliteit, snelheid en veiligheid.

Hoe identificeert Linux processen?

Omdat Linux een systeem voor meerdere gebruikers is, wat betekent dat verschillende gebruikers verschillende programma's op het systeem kunnen uitvoeren, moet elk actief exemplaar van een programma uniek door de kernel worden geïdentificeerd.

En een programma wordt geïdentificeerd aan de hand van de proces-ID (PID) en de ID van de bovenliggende processen (PPID). Daarom kunnen processen verder worden onderverdeeld in:

  • Ouderprocessen – dit zijn processen die tijdens runtime andere processen creëren.
  • Onderliggende processen – deze processen worden tijdens runtime door andere processen gemaakt.

Het init-proces

Init proces is de moeder (ouder) van alle processen op het systeem, het is het eerste programma dat wordt uitgevoerd wanneer het Linux-systeem opstart; het beheert alle andere processen op het systeem. Het wordt gestart door de kernel zelf en heeft dus in principe geen ouderproces.

Het init-proces heeft altijd de proces-ID 1. Het fungeert als adoptieouder voor alle weesprocessen.

U kunt het pidof-commando gebruiken om de ID van een proces te vinden:

pidof systemd
pidof top
pidof httpd

Om de proces-ID en de bovenliggende proces-ID van de huidige shell te vinden, voert u het volgende uit:

echo $$
echo $PPID

Een proces starten in Linux

Zodra u een opdracht of programma uitvoert (bijvoorbeeld cloudcmd – CloudCommander), start het een proces in het systeem. U kunt als volgt een voorgrondproces (interactief) starten, het wordt verbonden met de terminal en een gebruiker kan de invoer verzenden:

cloudcmd

Linux-achtergrondbanen

Om een proces op de achtergrond (niet-interactief) te starten, gebruikt u het & symbool. Hier leest het proces pas de invoer van een gebruiker als het naar de voorgrond wordt verplaatst.

cloudcmd &
jobs

Je kunt een proces ook naar de achtergrond sturen door het op te schorten met [Ctrl + Z]. Dit stuurt het SIGSTOP signaal naar het proces, waardoor de activiteiten ervan worden stopgezet; het wordt inactief:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Om de hierboven opgeschorte opdracht op de achtergrond uit te voeren, gebruikt u de opdracht bg:

bg

Om een achtergrondproces naar de voorgrond te sturen, gebruikt u de opdracht fg samen met de taak-ID, als volgt:

jobs
fg %1

Misschien vind je dit ook leuk: Hoe je Linux Command op de achtergrond start en het proces ontkoppelt in Terminal

Staten van een proces in Linux

Tijdens de uitvoering verandert een proces van de ene toestand naar de andere, afhankelijk van de omgeving/omstandigheden. In Linux heeft een proces de volgende mogelijke statussen:

  • Wordt uitgevoerd – hier is het actief (dit is het huidige proces in het systeem) of is het klaar om te worden uitgevoerd (het wacht op toewijzing aan een van de CPU's).
  • Wachten – in deze status wacht een proces op een gebeurtenis of op een systeembron. Bovendien maakt de kernel ook onderscheid tussen twee soorten wachtprocessen; Onderbreekbare wachtprocessen – kunnen worden onderbroken door signalen en ononderbroken wachtprocessen – wachten rechtstreeks op hardwarecondities en kunnen niet worden onderbroken door welke gebeurtenis/signaal dan ook.
  • Gestopt – in deze status is een proces gestopt, meestal door ontvangst van een signaal. Bijvoorbeeld een proces dat wordt opgespoord.
  • Zombie – hier is een proces dood, het is gestopt, maar het heeft nog steeds een vermelding in de procestabel.

Hoe actieve processen in Linux te bekijken

Er zijn verschillende Linux-tools voor het bekijken/inventariseren van lopende processen op het systeem, de twee traditionele en bekende zijn ps- en top-opdrachten:

1. ps-opdracht

Het geeft informatie weer over een selectie van de actieve processen op het systeem, zoals hieronder weergegeven:

ps 
ps -e | head 

2. boven – Systeemmonitoringtool

top is een krachtig hulpmiddel dat u een dynamisch real-time beeld biedt van een draaiend systeem, zoals weergegeven in de onderstaande schermafbeelding:

top 

Lees dit voor meer voorbeelden van topgebruik: 12 TOP-opdrachtvoorbeelden in Linux

3. blikken – Systeemmonitoringtool

glances is een relatief nieuwe tool voor systeemmonitoring met geavanceerde functies:

glances

Voor een uitgebreide gebruikshandleiding leest u: Glances – An Advanced Real Time System Monitoring Tool voor Linux

Er zijn verschillende andere handige Linux-systeemmonitoringtools die je kunt gebruiken om actieve processen weer te geven. Open de onderstaande link om er meer over te lezen:

  1. 20 opdrachtregelhulpmiddelen om de prestaties van Linux te controleren
  2. 13 Handigere Linux-monitoringtools

Hoe processen onder Linux te controleren

Linux heeft ook enkele commando's voor het besturen van processen zoals kill, pkill, pgrep en killall. Hieronder staan een paar basisvoorbeelden van hoe je ze kunt gebruiken:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Om te leren hoe u deze opdrachten diepgaand kunt gebruiken en om actieve processen in Linux te beëindigen/beëindigen, opent u de onderstaande links:

  1. Een gids voor Kill-, Pkill- en Killall-opdrachten om Linux-processen te beëindigen
  2. Hoe u lopende processen in Linux kunt vinden en beëindigen

Merk op dat je ze kunt gebruiken om niet-reagerende applicaties in Linux te doden wanneer je systeem vastloopt.

Signalen verzenden naar processen

De fundamentele manier om processen in Linux te controleren is door er signalen naar te sturen. Er zijn meerdere signalen die u naar een proces kunt sturen om alle uitgevoerde signalen te bekijken:

kill -l

Om een signaal naar een proces te sturen, gebruik je de commando's kill, pkill of pgrep die we eerder noemden. Maar programma's kunnen alleen op signalen reageren als ze geprogrammeerd zijn om die signalen te herkennen.

En de meeste signalen zijn voor intern gebruik door het systeem, of voor programmeurs wanneer ze code schrijven. De volgende signalen zijn nuttig voor een systeemgebruiker:

  • SIGHUP 1 – verzonden naar een proces wanneer de controlerende terminal gesloten is.
  • SIGINT 2 – verzonden naar een proces door de controlerende terminal wanneer een gebruiker het proces onderbreekt door op [Ctrl+C] te drukken.
  • SIGQUIT 3 – verzonden naar een proces als de gebruiker een stopsignaal [Ctrl+D] verzendt.
  • SIGKILL 9 – dit signaal beëindigt (doodt) een proces onmiddellijk en het proces zal geen opruimoperaties uitvoeren.
  • SIGTERM 15 – dit is een programmabeëindigingssignaal (kill verzendt dit standaard).
  • SIGTSTP 20 – door de controlerende terminal naar een proces gestuurd met het verzoek om te stoppen (terminalstop); geïnitieerd doordat de gebruiker op [Ctrl+Z] drukt.

Hieronder volgen voorbeelden van kill-opdrachten om de Firefox-applicatie te beëindigen met behulp van de PID zodra deze vastloopt:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Om een applicatie te beëindigen die de naam ervan gebruikt, gebruikt u pkill of killall als volgt:

pkill firefox
killall firefox 

De Linux-procesprioriteit wijzigen

Op het Linux-systeem hebben alle actieve processen een prioriteit en een bepaalde mooie waarde. Processen met een hogere prioriteit krijgen normaal gesproken meer CPU-tijd dan processen met een lagere prioriteit.

Een systeemgebruiker met rootrechten kan dit echter beïnvloeden met de commando's nice en renice.

Uit de uitvoer van het bovenste commando toont de NI de mooie waarde van het proces:

top  

Gebruik het nice commando om een mooie waarde voor een proces in te stellen. Houd er rekening mee dat normale gebruikers een mooie waarde van nul tot 20 kunnen toekennen aan processen waarvan zij eigenaar zijn.
Alleen de rootgebruiker kan negatieve mooie waarden gebruiken.

Om de prioriteit van een proces te renice te gebruiken, gebruikt u het renice commando als volgt:

renice +8  2687
renice +8  2103

Bekijk onze enkele nuttige artikelen over het beheren en controleren van Linux-processen.

  1. Linux-procesbeheer: opstarten, afsluiten en alles daartussenin
  2. Vind de top 15 processen op basis van geheugengebruik met 'top' in batchmodus
  3. Vind de best lopende processen op basis van het hoogste geheugen- en CPU-gebruik in Linux
  4. Hoe u een procesnaam kunt vinden met behulp van het PID-nummer in Linux

Dat is het voor nu! Heeft u vragen of aanvullende ideeën, deel deze met ons via onderstaand feedbackformulier.