clone()
[1] est un appel système du noyau Linux qui créée un processus fils partageant le même contexte d'exécution que son père (le même espace d'adressage). Il est utilisé par certaines bibliothèques implémentant les threads sous Linux. En pratique, clone()
n'est jamais appelé directement, mais à travers une bibliothèque de gestion des threads (telle que pthreads, qui propose la fonction phtread_create()
).
Le prototype de cette fonction est le suivant :
#include <sched.h>
int clone (int (*fn) (void *), void *child_stack, int flags, void *arg);
clone()
crée un nouveau fil d'exécution, exécutant la fonction pointée par le paramètre fn
(à l'opposé de fork()
où l'exécution se poursuit sur l'instruction suivante). Le paramètre child_stack
est un pointeur vers l'espace mémoire utilisé comme pile pour le nouveau fil d'exécution (qui doit préalablement être alloué par un appel à malloc()
; il doit pointer sur la dernière case mémoire). Le paramètre flags
spécifie ce que le fils doit hériter du contexte d'exécution du père. Le paramètre arg
est un pointeur générique pour le passage d'arguments à la fonction fn
.
Cet appel retourne le thread ID du fils en cas de succès, ou -1 en cas d'échec (et errno
est valorisé en conséquence).
À noter que cet appel système est spécifique au noyau Linux et ne doit pas être utilisé dans du code destiné à être compilé pour d'autres noyaux[2].
Notes et références
Voir aussi
Bibliographie
- The Linux Programming Interface: A Linux and UNIX System Programming Handbook, Michael Kerrisk, pages 598-609