Debian is een multitasking systeem, dus je hebt een manier nodig om meer dan één ding tegelijkertijd te doen. Grafische omgevingen zoals X voorzien hierin op natuurlijke wijze; ze staan tegelijkertijd meerdere vensters op het scherm toe. Natuurlijk voorziet Bash (of iedere andere shell) in vergelijkbare mogelijkheden.
Eerder maakte je gebruik van top om de verschillende processen op het systeem te bekijken. Je shell voorziet in een aantal comfortabele wijzen om alleen de processen die je vanaf de opdrachtregel hebt opgestart bij te houden. Iedere opdrachtregel start een job (ook een process group genoemd) om door de shell te worden uitgevoerd. Een job kan bestaan uit een enkel proces of een set processen in een pipeline --- meer over pipelines later.
Door het invoeren van een opdracht zal een job worden gestart. Probeer eens het intikken van man cp en de man page van cp zal op het scherm verschijnen. De shell gaat naar de achtergrond en keert terug wanneer je klaar bent met het lezen van de manual page (of q intikt om het te stoppen in plaats van er geheel doorheen te scrollen).
Maar stel dat je de manual page aan het lezen bent, en even iets anders wilt doen. Geen probleem. Typ terwijl je aan het lezen bent C-z om de huidige voorgrondtaak uit te stellen, en de shell in de voorgrond te plaatsen. Wanneer je een taak uitstelt, zal Bash je er eerst wat informatie over geven, en vervolgens geeft het je een shell-prompt. Je zal op het scherm iets te zien krijgen als:
NAME
cp - copy files
SYNOPSIS
cp [options] source dest
cp [options] source... directory
Options:
[-abdfilprsuvxPR] [-S backup-suffix] [-V {numbered,exist
ing,simple}] [--backup] [--no-dereference] [--force]
[--interactive] [--one-file-system] [--preserve] [--recur
sive] [--update] [--verbose] [--suffix=backup-suffix]
[--version-control={numbered,existing,simple}] [--archive]
[--parents] [--link] [--symbolic-link] [--help] [--ver
sion]
DESCRIPTION
--More--
[1]+ Stopped man cp
$ |
Merk de laatste twee regels op. De voorlaatste is de job informatie, en vervolgens krijg je een shell-prompt.
Bash wijst aan iedere opdrachtregel die je vanuit de shell draait een job nummer toe. Dit geeft je de mogelijkheid eenvoudig naar het proces te refereren. In dit geval is man cp job nummer 1, wat wordt weergegeven als [1]. De + betekent dat dit de laatste job was die je in de voorgrond had. Bash vertelt je ook de huidige status --- Stopped --- en de opdrachtregel van de job.
Er is heel veel dat je met jobs kunt doen. Probeer met man cp nog steeds uitgesteld, dit:
Start een nieuwe job.
Stel de job man ls uit door het indrukken van de Control-toets en kleine letter z; je zou de job informatie te zien moeten krijgen.
Start nog een andere job.
Stel het uit.
Vraag Bash om een weergave van de huidige taken:
$ jobs [1] Stopped man cp [2]- Stopped man ls [3]+ Stopped man mv $ |
Plaats de laatste in de achtergrond geplaatste taak (man mv, degene met de +) weer in de voorgrond. Als je op de spatiebalk drukt, zal de man page verdergaan met scrollen.
Stel man mv opnieuw uit.
Je kunt naar iedere job refereren door voor het nummer een % te plaatsen. Als je fg gebruikt zonder een job aan te geven, dan wordt uitgegaan van de laatste actieve job.
Stel man cp nogmaals uit.
Kill job 1. Bash zal de job informatie rapporteren:
$ kill %1 [1]- Terminated man cp $ |
$ kill -9 %1 [1]- Killed man mv $ |
Breng het top display weer tevoorschijn. Geef de opdracht u in top om alleen je eigen processen te zien. Zoek in de rechterkolom naar de man ls en man mv opdrachten. man cp zal er niet staan aangezien je de opdracht kill er op toepaste. top toont je de systeemprocessen overeenkomstig je jobs; merk op dat het PID links op het scherm niet correspondeert met het job nummer.
Wellicht dat je je processen niet kunt vinden omdat ze zich onderaan het scherm bevinden; als je X gebruikt, kun je de xterm van grootte wijzigen om dit probleem op te lossen.
Zelfs deze simpele taken bestaan in feite uit meerdere processen, waaronder het man proces en de pager more welke het tegelijkertijd scrollen van een pagina afhandelt. Wellicht merk je dat ook de more processen in top zichtbaar zijn.
Je kunt er waarschijnlijk zelf wel achter komen hoe de resterende jobs kunnen worden opgeruimd. Je kunt ze zowel killen (met de kill opdracht) of ieder in de voorgrond plaatsen (met fg) en ze beëindigen. Onthoud dat de opdracht jobs je de lijst met bestaande jobs en de status van deze jobs geeft.
Een laatste opmerking: de documentatie van Bash is tamelijk goed, maar het is in het Info helpsysteem te vinden in plaats van in de man pages. Typ info bash om het te lezen. Zie Hoofdstuk 5 voor instructies over het gebruik van het info programma. Bash bevat ook een zeer goede samenvatting van de opdrachten, die toegankelijk zijn via de opdracht help. help toont een lijst met beschikbare onderwerpen; meer informatie over ieder onderwerp is toegankelijk via de opdracht help naam van onderwerp; Probeer bijvoorbeeld het intikken van
help cd |
| [1] | In technische termen zendt kill gewoon een signaal. Standaard verzendt het een signaal dat verzoekt om beëindiging. (TERM, of signaal 15); maar je kunt ook een signaal opgeven, en signaal 9 (KILL) is het signaal dat de beëindiging forceert. De opdrachtnaam kill is niet noodzakelijk juist voor wat betreft het gezonden signaal; het zenden van het signaal TSTP (terminal stop) bijvoorbeeld, stelt het proces uit, en staat toe dat het later wordt voortgezet. |