Ouder- en kindprocessen

Alle processen zijn afkomstig van een eerder proces, wat hun ouder proces wordt genoemd. [1] De opdracht ps is een handig hulpmiddel voor het verkennen van processen, en het kan worden gebruikt om de verhoudingen tussen ouder-kind te bestuderen.

ps f zou de volgende uitvoer kunnen tonen:
$ ps f
PID  TT STAT   TIME
7270  p5 S      0:00 bash
15980  p5 R      0:00  \_ ps f
19682  p4 S      0:00 bash
15973  p4 S      0:00  \_ man ps
15976  p4 S      0:00      \_ sh -c /bin/gzip -dc '/var/catman/cat1/ps.1.gz' | { export MAN_PN LESS; MAN_PN='ps(1)'; LESS="$LESS\$-Pm\:\$i
15977  p4 S      0:00          \_ /bin/gzip -dc /var/catman/cat1/ps.1.gz
15978  p4 S      0:00          \_ sh -c /bin/gzip -dc '/var/catman/cat1/ps.1.gz' | { export MAN_PN LESS; MAN_PN='ps(1)'; LESS="$LESS\$-Pm\
15979  p4 S      0:00              \_ less
$ 

Hier kun je zien dat ik een aantal processen, waaronder twee shells, heb draaien. De shells hebben kindprocessen: shellproces 7270 heeft kindproces 15980 (ps f) en shell 19682 heeft kindproces 15973 (man ps). man ps heeft op zijn beurt een complexe set subprocessen aangeroepen om een manpage te kunnen tonen. Maak je er nu niet druk om wat deze subprocessen doen.

Ouders en kinderen hebben een complexe verhouding. Meestal is het zo dat als een ouder afsterft, het kind ook af zal sterven. Zo kun je een hele set processen killen -- --- je kunt bijvoorbeeld door het killen van het ouderproces, 15973 in het voorbeeld hiervoor, alle kinderen van man ps killen.

Kinderen erven de omgevingsvariabelen, en een aantal kenmerken zoals de huidige werkdirectory van hun ouders.

Als een shell een opdracht uitvoert, brengt het de opdracht voort als een kindproces. Dus de opdracht man erft de omgeving van de shell; als je de variabele PAGER hebt ingesteld, zal man het kunnen zien.

Als het je niet is gelukt een variabele te exporteren zal alleen de shell zelf het zien, en zal het niet aan de kinderen, zoals man worden doorgegeven.

Noten

[1]

Misschien dat je hier een kip en ei probleem ziet. Er is een origineel proces dat alle anderen start; het is procesnummer 1, init. Je kunt het zien door het intikken van ps u 1.