Chaque processus a ainsi un processus père, qui est celui qui l'a
lancé. Le numéro du processus père est noté PPID (parent PID). Un
processus n'a bien sûr qu'un seul père, mais peut lancer l'exécution de
plusieurs autres processus, nommés processus fils. On a donc affaire
à une arborescence de processus. Lors de l'initialisation du système
UNIX, un premier processus, nommé init, est créé avec un
PID=1. init est l'ancêtre de tous les processus.
A bas niveau, ll n'y a qu'une seule façon de donner naissance à un
nouveau processus, la duplication. Un processus peut demander au
système sa duplication en utilisant la primitive fork() (que nous
étudions plus loin). Le système crée alors une copie complète du
processus, avec un PID différent. L'un des deux processus est fils de
l'autre.
Il n'est évidement guère utile d'avoir deux copies du même programme
s'exécutant dans le système. Après duplication, le fils va
``changer de programme'' en utilisant la primitive
exec(). Cette primitive conserve l'identité du
processus mais remplace son code exécutable (et ses données) par celui
d'une nouvelle commande.
Voyons ce qu'il se passe lorsque qu'un shell exécute la commande
compress totoqui demande la compression du fichier nommé toto :
compress;
compress s'exécute et compacte le fichier toto;
lorsqu'elle termine, le processus fils disparaît.