Terug naar blog

Processen beheren in Linux - een gids over het gebruik van ps, kill en nice

Processen beheren in Linux - een gids over het gebruik van ps, kill en nice

Inleiding

Wanneer de meesten van ons computers gebruiken, voeren we verschillende applicaties uit. Deze applicaties worden uitgevoerd door programma's die servers of besturingssystemen worden genoemd. Er zijn veel verschillende soorten servers die op verschillende manieren werken. Een daarvan is Linux. Linux voert applicaties uit in de vorm van processen.

In Linux noemen we elke applicatie een 'proces'. De server is in staat om het low-level aspect van de levenscyclus van het proces te beheren. Als gebruiker moet u mogelijk met de server communiceren om enkele aspecten op een hoger niveau te manipuleren. U kunt met het besturingssysteem communiceren en dit beheren door verschillende tools te gebruiken. Er zijn veel commando's die u kunt gebruiken om verschillende aspecten en functies van de server aan te passen. Hier is een eenvoudig te volgen handleiding over hoe u eenvoudig uw op Linux gebaseerde server op Ubuntu instelt. U kunt bovendien leren hoe u de LAMP Stack (Linux, Apache, MySQL, PHP) installeert.

Deze gids richt zich op hoe u ps, kill en nice kunt gebruiken om processen in Linux te beheren.

Lopende processen bekijken in Linux

  • top

Om te beginnen is top een van de meest elementaire commando's die u moet kennen. Deze tool helpt u te visualiseren welke processen momenteel op het systeem worden uitgevoerd. Dit is hoe het eruitziet wanneer u het uitvoert:

top command output

 

Bovenaan het resultaat vindt u de systeemstatistieken. Dit geeft u informatie over zaken als de systeembelasting en een aantal taken. In dit voorbeeld kunt u vaststellen dat er één actief proces is en 55 inactieve processen. De inactieve of slapende processen zijn de processen die u momenteel niet gebruikt. Dit betekent dat ze de systeembronnen niet bezetten. Ten slotte ziet u alle actieve processen onderaan de pop-up met de gebruiksstatistieken.

  • htop

Voordat u dit commando gebruikt, moet u het installeren vanuit de repositories door het volgende te typen en uit te voeren:

Zodra u het hebt, kunt u het gebruiken om vergelijkbare informatie weer te geven als met top. Het belangrijkste verschil is dat u met het htop-commando een gebruiksvriendelijker resultaat krijgt:

htop command output

Zoals u kunt zien, is dit resultaat eenvoudig te volgen en te interpreteren.

ps gebruiken om processen op te lijsten

Hoewel u de bovengenoemde commando's kunt gebruiken om actieve processen te bekijken, dekken ze mogelijk niet altijd alle scenario's. Gelukkig hebben we een krachtiger en flexibeler hulpmiddel tot onze beschikking. Dit is het ps-commando.

Laten we eens kijken wat u ziet als u het commando ongewijzigd uitvoert:

ps command output

In deze uitvoer ziet u alle processen die worden uitgevoerd in relatie tot de huidige gebruiker en sessie. Dit geeft u echter niet veel informatie.

Als u een meer holistisch overzicht wilt van alle processen die op het systeem worden uitgevoerd, moet u een argument gebruiken. Een argument stelt u in staat om alle processen te zien die eigendom zijn van alle gebruikers, ongeacht de terminalkoppeling. De uitvoer verschijnt ook in een zeer gebruiksvriendelijk en gemakkelijk te lezen formaat. Hier is een voorbeeld:

ps aux

Aan de andere kant kunt u deze informatie ook in een boomstructuur visualiseren. Hier worden, zoals u zult zien, ook de hiërarchische relaties duidelijk:

output in tree format

In dit voorbeeld kunt u zien hoe kthreadd wordt weergegeven als de ouder van de daaropvolgende processen.

  • Wat zijn proces-ID's?

Als een Linux- of Unix gebruiker moet u op de hoogte zijn van proces-ID's. Deze staan ook bekend als PID's en zijn unieke identiteiten die door het systeem aan elk proces worden toegewezen. Met deze identiteiten houdt de server elk afzonderlijk proces bij. Om de PID van een bepaald proces te achterhalen, moet u het pgrep-commando gebruiken, zoals hier:

Wanneer u uw systeem opstart, begint het eerste proces te draaien. Dit proces wordt init genoemd. Standaard krijgt het init-proces de PID '1'. U kunt de PID van dit proces als volgt controleren:

Het init-proces heeft vervolgens de verantwoordelijkheid om alle andere programma's of processen op te starten. Begrijpelijkerwijs zullen de volgende processen oplopende of grotere PID's hebben.

  • Wat zijn ouderprocessen?

Een ander concept om te kennen is het ouderproces. Als proces A proces B voortbrengt, dan is proces A het ouderproces van proces B. Om ze te helpen onderscheiden, wijst het systeem een PPID toe aan ouderprocessen. Je kunt deze PPID opmerken in de kolomkoppen wanneer je een beheercommando zoals top, htop en ps uitvoert.

  • Wat zijn ouder-kindrelaties?

Zoals we al weten, brengen ouderprocessen kindprocessen voort. Deze creatie gebeurt in twee stappen. De eerste is fork(). Dit begint met het maken van een nieuwe adresruimte. Het kopieert ook de bronnen van de ouder met behulp van copy-on-write, zodat deze ook beschikbaar zijn voor het kindproces. De tweede is exec(). Dit is verantwoordelijk voor het laden en uitvoeren van een uitvoerbaar bestand in de zojuist gemaakte adresruimte.

  • Wat als het kindproces sterft voor het ouderproces?

Als dit gebeurt, wordt het kindproces een zombie. Dat wil zeggen, totdat het ouderproces er informatie over verzamelt of de kernel vertelt dat het de bijbehorende informatie niet nodig heeft. Zodra dit gebeurt, komen de bronnen die het proces gebruikte weer vrij.

  • Wat als het ouderproces sterft voor het kindproces?

In dit scenario zal het systeem het kindproces toewijzen aan een ander ouderproces. Dit kan init zijn of een ander proces.

Signalen verzenden naar processen in Linux

Je kunt een bepaald proces laten reageren door een signaal te sturen. Signalen helpen je te communiceren met het besturingssysteem. Je kunt het signaal gebruiken om een applicatie te beëindigen, te starten of een bepaald gedrag of bepaalde taak aan te passen.

  • PID gebruiken om signalen te verzenden

Een van de hulpprogramma's die je kunt gebruiken om signalen te verzenden in Linux is kill. Dit commando helpt je, zoals de naam al suggereert, een proces te beëindigen of te killen:

Dit hulpprogramma stuurt het TERM-signaal naar het proces, wat het de opdracht geeft om te beëindigen. Het commando zorgt ervoor dat de applicatie netjes opruimt en probleemloos afsluit. Mocht het programma niet soepel afsluiten na het TERM-signaal, dan kun je dit omzeilen door direct het KILL-signaal te sturen:

Dit signaal gaat niet naar het programma. Het gaat naar de kernel van het besturingssysteem. De kernel zal het proces direct afsluiten. Je kunt dit gebruiken wanneer een programma de signalen die je ernaar stuurt negeert.

In dit commando kun je de naam van het signaal ook vervangen door het bijbehorende nummer. Je kunt bijvoorbeeld ‘-15’ gebruiken in plaats van ‘-TERM’. Op dezelfde manier kun je ‘-KILL’ vervangen door ‘-9’.

  • Signalen gebruiken voor verschillende doeleinden

Je kunt signalen ook voor andere dingen gebruiken dan het beëindigen of killen van programma's. Een probleem waar je bijvoorbeeld mee te maken kunt krijgen, is het herstarten van daemons. Elke keer dat een daemon een hang-up-signaal of HUP ontvangt, zal deze herstarten in programma's zoals Apache. Om dit te omzeilen, kun je het volgende signaal gebruiken:

Dit commando zorgt ervoor dat Apache zijn configuratie opnieuw laadt. Hierdoor blijft het de relevante inhoud aanbieden.

Als je wilt zien welke signalen je kunt verzenden met het kill-hulpprogramma, gebruik dan het volgende commando:

list of signals

  • Signalen verzenden op naam

Traditioneel stuur je een signaal met behulp van de PID van het programma. Je hebt echter ook de optie om signalen te verzenden met de normale naam van het proces. Om dit te doen, kun je het pkill-commando gebruiken. Het werkt op een vergelijkbare manier als hoe het pkill-commando werkt. Het enige verschil is dat je hiermee de procesnaam kunt gebruiken:

Dit pkill-commando is het equivalent van het volgende kill-commando:

Je hebt ook een commando voor wanneer je een signaal naar elke instantie wilt sturen in plaats van naar een specifiek proces. Het volgende commando stuurt een TERM-signaal naar alle Firefox-instanties die op het systeem draaien:

Procesprioriteiten aanpassen

Een ander ding dat u met Linux-commando's kunt doen, is het aanpassen van prioriteiten. Dit betekent dat u kunt beslissen welk proces prioriteit heeft in uw serveromgeving. Er kunnen bepaalde processen zijn die u als kritiek beschouwt. Andere zijn misschien niet zo noodzakelijk. Het systeem zal de laatstgenoemde programma's pas uitvoeren als er nog wat bronnen over zijn.

U kunt de procesprioriteit in Linux beheren via het niceness-commando. Deze waarde geeft taken met een hoge prioriteit aan als minder 'nice' (vriendelijk) en processen met een lage prioriteit als meer 'nice'. Denk er zo over: processen met een hoge prioriteit zijn minder 'nice' omdat ze de bronnen opeisen. Taken met een lage prioriteit delen ze, dus ze zijn 'nicer' (vriendelijker).

U kunt de nice-waarde van een bepaald proces zien wanneer u het top-commando uitvoert. Deze waarde bevindt zich in de kolom 'NI'. Taken met een hoge prioriteit hebben nice-waarden die variëren tussen '-19/-20'. Processen met een lage prioriteit variëren tussen '19/20'. U zult zoiets als dit zien:

Als u een proces wilt uitvoeren met een persoonlijk toegewezen nice-waarde, hoeft u alleen maar het nice-commando te gebruiken:

Dit commando werkt alleen wanneer u het betreffende programma start. Als u de nice-waarde wilt wijzigen van een programma dat al actief is, moet u renice gebruiken:

Conclusie

Zoals u kunt zien, zijn de tools hier heel anders dan de grafische tools. Hierdoor kunnen ze voor een beginner moeilijk te begrijpen zijn. Deze gids helpt u vertrouwd te raken met de commando's. Meer oefening zal u helpen ze beter te leren en efficiënter te gebruiken.

Bekijk onze andere bronnen die u kunnen helpen uw Linux-servers beter te beheren, inclusief handleidingen over hoe u uw Linux-server configureert om SSH-authenticatie op basis van sleutels te gebruiken, bestanden lokaliseren op uw Linux VPS-systeem met whereis, which, whatis, readlink en find, en omgevings- en shellvariabelen lezen en instellen op een Linux VPS.

Veel computerplezier!

author

Akshay Nagpal

Auteur · CloudSigma

Preslav Dobrev is een creatief ontwerper bij CloudSigma, met de nadruk op een consistente bedrijfsidentiteit door middel van traditionele en innovatieve marketingkanalen. Hij is bedreven in het samenvoegen van artistieke visie met strategische marketing om impactvolle merkverhalen te creëren.

Reacties

Nog geen reacties. Wees de eerste.