Ik Van Linux

Achtergrond


Tot nu toe hebben uitsluitend programma’s gezien die in de voorgrond draaien. Bij de meeste programma’s is dat niet eens zo interessant, vooral wanneer een programma in een fractie van een seconde al afgelopen is. Achtergrond processen worden pas interessant wanneer ze langer duren.

Pauze

Stel voor dat je een bestand aan het editen bent en je wilt snel even een Bash commando tussendoor uitvoeren. Nu zou je het bestand kunnen opslaan en de editor kunnen sluiten. En dan kun je na het uitvoeren van Bash commando gewoon de editor weer starten en verder werken aan je bestand. Nadeel is dat je dan weer moet zoeken naar waar je gebleven bent.
Dat kan handiger.

De meeste Linux programma’s kunnen gepauzeerd worden door het indrukken van Ctrl-Z.

sleep 1000
Ctrl-Z
^Z
[1]+  Stopped                 sleep 1000

Het sleep commando doet eigenlijk niets. Het wacht gewoon een x aantal secondes. In ons geval zijn dat er 1000, gewoon omdat het lekker lang duurt zodat we ondertussen andere dingen kunnen doen. Als je op Ctrl-Z drukt stop je het programma. Nou, stoppen is niet helemaal het goede woord. Het programma is gepauzeerd. Je kunt het namelijk weer hervatten. Maar eerst even wat meer achtergrond (woordgrapje).

Je ziet aan [1] dat je programma als nummer 1 in de gestopte programmalijst staat. Dat kan belangrijk zijn wanneer je meer dan een programma in pauze zet.

sleep 500
Ctrl-Z
^Z
[2]+  Stopped                 sleep 500

Zie je, dit is het tweede programma wat je met Ctrl-Z gestopt hebt.

Wanneer je Ctrl-D drukt zou je normaal gesproken uitgelogd worden. Maar omdat er nog gestopte taken aanwezig zijn krijg je een waarschuwing.

Ctrl-D
There are stopped jobs.

Het exit commando is zo vergevingsgezind niet. Dat commando logt je onherroepelijk uit. Daarom vind ik het prettiger om altijd via Ctrl-D uit te loggen. En het is nog minder typewerk ook.

Maar stel dat je niet meer weet welke programma’s nog gestopt zijn. Dat kun je als volgt zien:

jobs
[1]-  Stopped                 sleep 1000
[2]+  Stopped                 sleep 500

Hervatten In De Voorgrond

Je kunt een programma hervatten met het fg commando. Wanneer je gewoon fg typt zal het programma hervat worden wat je als laatste gestopt hebt. In de jobs lijst is dat het programma met het plusje achter het nummer.
Wil je een ander programma eerst hervatten dan kun je fg laten volgen door het cijfer wat in de jobs lijst voor het gewenste programma staat. Je kunt ook het voorlaatste programma hervatten door fg - te gebruiken.

Hervatten In De Achtergrond

We gaan er even vanuit dat de bovenstaande sleep commando’s nog niet afgelopen zijn. Zo niet moet je er eentje opnieuw starten en pauzeren.
Met het bg commando wordt het laatst gepauzeerde programma in de achtergrond geplaatst.

jobs
[1]+  Stopped                 sleep 1000
bg
[1]+ sleep 1000 &
jobs
[1]+  Running                 sleep 1000 &

Je kunt ook job nummers opgeven net als bij het fg commando, maar omdat in ons voorbeeld nog maar een job liep is dat niet nodig.

Let wel op! Want als je een interactief programma, zoals nano, in de achtergrond plaatst dan kun je jezelf wel eens buiten sluiten. Achtergrond programma’s kunnen namelijk geen input van het toetsenbord ontvangen.

Meteen Maar In De Achtergrond

Je kunt programma’s ook meteen in de achtergrond uit laten voeren, zonder dat je het eerst moet stoppen om vervolgens met bg het programma naar de achtergrond te moeten sturen.
Dit kan handig zijn voor commando’s die wat langer duren, waarbij je niet echt geïnteresseerd bent in de output (bijvoorbeeld kopieeropdrachten van grote bestanden). En soms moet een programma ook in de achtergrond draaien omdat het als service bedoeld is.
Een programma meteen in de achtergrond draaien doe je door een & teken achter het commando te plaatsen.

sleep 1000 &
[1] 32394

Je ziet weer dat het programma een volgnummer gekregen heeft. Daarmee kun je het programma weer naar de voorgrond krijgen door fg 1 in te typen. Maar dat gaan we hier niet doen.
Het tweede getal is zogenaamde Process Id, of beter bekend als PID nummer. Wat we daarmee kunnen gaan we in het volgende hoofdstuk zien.

Als je lang genoeg wacht krijg je tussen je Prompts door dit te zien:

[1]+  Done                    sleep 1000

Dit geeft aan dat het programma, wat in de achtergrond draaide, nu is afgelopen. Tot die tijd kon je me het jobs commando zien dat het programma nog steeds loopt.