1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
|
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
.\" May be distributed under the GNU General Public License.
.\" Modified by Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de)
.\" Modified Sat Jul 24 13:22:07 1993 by Rik Faith (faith@cs.unc.edu)
.\" Modified 21 Aug 1994 by Michael Chastain (mec@shell.portal.com):
.\" New man page (copied from 'fork.2').
.\" Modified 10 June 1995 by Andries Brouwer (aeb@cwi.nl)
.\"
.\" Traduction 14/10/1996 par Christophe Blaess (ccb@club-internet.fr)
.\" Mise jour 18/09/1998 - LDP-man-pages-1.20
.TH CLONE 2 "18 Septembre 1998" "Linux" "Manuel du programmeur Linux"
.SH NOM
__clone \- Crer un processus fils (child).
.SH SYNOPSIS
.B #include <linux/sched.h>
.sp
.BI "int __clone(int (*" "fn" ") (void *" "arg" "), void *" "pile_fils" ", int " "flags" ", void *" "arg" ")"
.SH DESCRIPTION
.B __clone
cree un nouveau processus, comme le fait
.BR fork (2).
Contrairement celui-ci,
.B __clone
permet le partage d'une partie du contexte d'excution entre le processus pre
et le processus fils. Le partage peut s'appliquer sur l'espace mmoire, sur
la table des descripteurs de fichiers, la table des gestionnaires de signaux...
L'appel systme
.B __clone
est principalement utilis pour permettre l'implmentation des threads :
un programme est scind en plusieures lignes de contrle, s'excutant
simultanment dans un espace de mmoire partage.
Quand le processus fils est cr, il excute la fonction
.IR fn ( arg ).
L'argument
.I fn
est un pointeur sur la fonction appele par le processus fils lors de son
dmarrage.
L'argument
.I arg
est transmis la fonction
.I fn
lors de son invocation.
Quand la fonction
.IR fn ( arg )
revient, le processus fils se termine. La valeur entire renvoye par
.I fn
est utilise comme code de retour du processus fils. Ce dernier peut
galement se terminer de manire explicite en invoquant la fonction
.BR exit (2)
ou aprs la rception d'un signal fatal.
L'argument
.I pile_fils
indique l'emplacement de la pile utilise par le processus fils.
Comme les processus pre et fils peuvent partager de la mmoire,
il n'est gnralement pas possible pour le fils d'utiliser la mme
pile que son pre. Le processus parent doit donc prparer un espace
mmoire pour stocker la pile de son fils, et transmettre
.B __clone
un pointeur sur cet emplacement.
Les piles croissent vers le bas sur tous les processeurs implmentant
Linux (sauf le HP PA), donc
.I pile_fils
doit pointer sur la plus haute adresse de l'espace mmoire prvu pour
la pile du processus fils.
L'octet de poids faible de
.I flags
contient le numro du signal qui sera envoy au pre lorsque le processus
fils se terminera.
.I flags
permet galement de prciser ce qui sera partag entre le pre et le fils,
en effectuant un OU binaire entre une ou plusieurs des constantes suivantes :
.TP
.B CLONE_VM
Si le bit
.B CLONE_VM
est actif, les processus pre et fils s'excutent dans le mme espace mmoire.
En particulier, les critures en mmoire effectues par l'un des processus sont
visibles par l'autre.
De mme toute projection en mmoire, ou toute suppression de projection,
effectues avec
.BR mmap (2)
ou
.BR munmap (2)
par l'un des processus affectera galement l'autre processus.
Si
.B CLONE_VM
n'est pas actif, le processus fils utilisera une copie distincte de l'espace
mmoire de son pre. Le clich tant ralis lors de l'invocation de
.BR __clone .
Les critures ou les projections de fichiers en mmoire effectues par un processus
n'affectent pas l'autre processus, comme cela se passe avec
.BR fork (2).
.TP
.B CLONE_FS
Si l'attribut
.B CLONE_FS
est positionn, les processus pre et fils partagent les mmes informations
concernant le systme de fichiers. Ceci inclue la racine du systme de
fichiers, le rpertoire de travail, et l'umask. Tout appel
.BR chroot (2),
.BR chdir (2),
ou
.BR umask (2)
effectu par un processus aura galement influence sur l'autre processus.
Si
.B CLONE_FS
n'est pas choisi, le processus travaille sur une copie des informations du pre
concernant le systme de fichiers. Cette copie est effectue lors de
l'invocation de
.BR __clone .
Les appels
.BR chroot (2), chdir (2), umask (2)
effectus par un processus n'affectent pas l'autre processus.
.TP
.B CLONE_FILES
Si l'attribut
.B CLONE_FILES
est positionn, les processus pre et fils partagent la mme table des
descripteurs de fichiers. Les descripteurs feront alors toujours rfrence
aux mmes fichiers pour les deux processus. Tout decripteur cr par
un processus est galement valide pour l'autre processus. De mme si
un processus ferme un descripteur, ou modifie ses attributs, l'autre
processus en est aussi affect.
Si
.B CLONE_FILES
n'est pas positionn, le processus fils hrite d'une copie des descripteurs
de fichiers ouverts par son pre au moment de l'appel
.BR __clone .
Les oprations effectues ensuite sur un descripteur par un des processus
n'affectent pas l'autre processus.
.TP
.B CLONE_SIGHAND
Si l'attribut
.B CLONE_SIGHAND
est positionn, les processus pre et fils partagent la mme table des
gestionnaires de signaux. Si le pre, ou le fils, appelle
.BR sigaction (2)
pour modifier le comportement associ un signal, ce comportement est
galement chang pour l'autre processus. Nanmoins, le pre et le
fils ont toujours des masques de signaux distincts, et leurs ensembles
de signaux bloqus sont indpendants.
L'un des processus peut donc bloquer un signal en utilisant
.BR sigprocmask (2)
sans affecter l'autre processus.
Si
.B CLONE_SIGHAND
n'est pas utilis, le processus fils hrite d'une copie des gestionnaires
de signaux de son pre lors de l'invocation de
.BR __clone .
Les appels
.BR sigaction (2)
effectus ensuite depuis un processus n'ont pas d'effets sur l'autre
processus.
.TP
.B CLONE_PID
Si l'attribut
.B CLONE_PID
est positionn, les processus pre et fils ont le mme numro de processus.
Si
.B CLONE_PID
n'est pas slectionn, le processus fils possde un identificateur unique,
distinct de celui de son pre.
.SH "VALEUR RENVOYE"
.BR clone
S'il russit, renvoie le PID du processus fils au processus
pre, et 0 au processus fils.
En cas d'chec
.BR clone
renvoie \-1 au processus pre, aucun processus fils n'est cr, et
.I errno
contient le code d'erreur.
.SH ERREURS
.TP
.B ENOSYS
.B clone
dclenchera toujours cette erreur moins que le noyau n'ait t
compil avec la constante symbolique
.B CLONE_ACTUALLY_WORKS_OK
dfinie.
.TP
.B EAGAIN
Pas assez de mmoire pour copier les tables de pages du
processus parent et allouer une structure de tche pour
le processus fils.
.SH BUGS
Par dfaut
.B CLONE_ACTUALLY_WORKS_OK
n'est pas dfini.
.br
Il n'y a pas de dfinition pour
.B clone
dans
.BR libc.so.4.5.26 .
.br
Les commentaires dans le noyau (1.1.46) indiquent que le cas o
.B COPYVM
n'est pas dfini est mal gr.
.SH CONFORMIT
Cet appel-systme est spcifique Linux et ne doit pas tre
employ dans des programmes portables.
.SH "VOIR AUSSI"
.BR fork (2)
.SH TRADUCTION
Christophe Blaess, 1997.
|