File: clone.2

package info (click to toggle)
manpages-es 1.24a-6
  • links: PTS
  • area: main
  • in suites: potato
  • size: 4,256 kB
  • ctags: 7
  • sloc: makefile: 66; sh: 62
file content (229 lines) | stat: -rw-r--r-- 7,770 bytes parent folder | download
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
225
226
227
228
229
.\" 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)
.\" Translated 20 Dec 1995 Miguel A. Sepulveda (miguel@typhoon.harvard.edu)
.\" Modified 1 Jul 1996 Miguel A. Sepulveda (angel@vivaldi.princeton.edu)
.\" Modified 25 april 1998 by Xavier Leroy <Xavier.Leroy@inria.fr>
.\" Revisado Tue May 12 10:15:41 1998 por:
.\"          Cesar D. Lobejon (cesar@alien.mec.es)            
.\" Translation revised Tue Aug 18 1998 by Juan Piernas <piernas@ditec.um.es>
.\"
.TH CLONE 2 "25 Abril 1998" "Linux 2.0.33" "Manual del Programador de Linux"
.SH NOMBRE
__clone \- crea un proceso hijo
.SH SINOPSIS
.B #include <sched.h>
.sp
.BI "int __clone(int (*" "fn" ") (void *" "arg" "), void *" "child_stack" ", int " "flags" ", void *" "arg" ")"
.SH DESCRIPCIN
.B __clone
crea un nuevo proceso como lo hace
.BR fork (2).
A diferencia de
.BR fork (2),
.B __clone
permite al proceso hijo compartir partes de su contexto de ejecucin con su
proceso padre, tales como el espacio de memoria, la tabla de descriptores de
fichero y la tabla de manejadores de seal. El principal uso de
.B __clone
es para implementar los hilos: mltiples hilos de control en un programa que
se ejecutan concurrentemente en un espacio de memoria compartido.

Cuando se crea el proceso hijo, ste ejecuta la funcin
.IR fn ( arg ).
El argumento
.I fn
es un puntero a una funcin que es ejecutada por el proceso hijo al comienzo
de su ejecucin.
El argumento
.I arg
se pasa a la funcin
.IR fn .

Cuando la funcin
.IR fn ( arg )
regresa, el proceso hijo termina. El entero devuelto por
.I fn
es el cdigo de salida del proceso hijo. El proceso hijo tambin puede
terminar explcitamente ejecutando
.BR exit (1)
o despus de recibir una seal fatal.

El argumento
.I child_stack
indica la posicin de la pila utilizada por el proceso hijo. Aunque los
procesos padre e hijo pueden compartir la memoria, no es posible, en
general, para el proceso hijo ejecutarse usando la misma pila que
el proceso padre. Por tanto, el proceso padre debe preparar un
rea de memoria para la pila del hijo y pasar un puntero a dicha rea a
.BR __clone .
Las pilas crecen hacia abajo en todos los procesadores en los que se ejecuta
Linux (excepto en el procesador HP PA), por lo que
.I child_stack
apunta normalmente a la direccin ms alta de la zona de memoria preparada
para la pila del hijo.

El byte bajo de 
.I flags
contiene el nmero de la seal enviada al padre cuando el hijo muere.
.I flags
puede tambin ser operado con un OR a nivel de bits (bitwise or) con
una o varias de las siguientes constantes, para as especificar qu van a
compartir los procesos padre e hijo:

.TP
.B CLONE_VM
Si se pone
.BR CLONE_VM ,
los procesos padre e hijo se ejecutan en el mismo espacio de memoria. En
particular, la escrituras de memoria realizadas por el proceso padre o por
el proceso hijo tambin son visibles en el otro proceso. Adems, cualquier
asociacin o desasociacin de memoria realizada con
.BR mmap (2)
o
.BR munmap (2)
por el proceso padre o hijo tambin afecta al otro proceso.

Si no se pone
.BR CLONE_VM ,
el proceso hijo se ejecuta en una copia particular del espacio de memoria
del padre en el momento de ejecutar
.BR __clone .
Las escrituras de memoria o la asociacin/desasociacin de fichero realizada
por uno de los procesos no afecta al otro, como en el caso de
.BR fork (2).

.TP
.B CLONE_FS
Si se pone
.BR CLONE_FS ,
los procesos padre e hijo comparten la misma informacin del sistema de
ficheros. sta incluye la raz del sistema de ficheros, el directorio de
trabajo actual y el valor de umask. Cualquier llamada a
.BR chroot (2),
.BR chdir (2)
o
.BR umask (2)
realizada por el proceso padre o hijo tambin afecta al otro proceso.

Si no se pone
.BR CLONE_FS ,
el proceso hijo trabaja con una copia de la informacin del sistema de
ficheros del proceso padre en el momento de ejecutar
.BR __clone .
Las llamadas a
.BR chroot (2),
.BR chdir (2)
o
.BR umask (2)
realizadas despus por uno de los procesos no afectan al otro.
.TP
.B CLONE_FILES
Si se pone
.BR CLONE_FILES ,
los procesos padre e hijo comparten la misma tabla de descriptores de
fichero. Los descriptores de fichero siempre se refieren a los mismos
ficheros en el padre y en el proceso hijo. Cualquier descriptor de fichero
creado por el proceso padre o por el proceso hijo tambin es vlido en el
otro proceso. De igual forma, si uno de los procesos cierra un descriptor de
fichero o cambia sus banderas (flags) asociadas, el otro proceso tambin se
ver afectado.

Si no se pone
.BR CLONE_FILES ,
el proceso hijo hereda una copia de todos los descriptores de fichero
abiertos en el proceso padre en el momento de ejecutar
.BR __clone .
Las operaciones sobre los descriptores de fichero realizadas despus por uno
de los procesos padre o hijo no afectan al otro.
.TP
.B CLONE_SIGHAND
Si se pone
.BR CLONE_SIGHAND ,
los procesos padre e hijo comparten la misma tabla de manejadores de seal.
Si el proceso padre o hijo llama a
.BR sigaction (2)
para cambiar el comportamiento asociado a una seal, el comportamiento
tambin se cambia en el otro proceso. Sin embargo, los procesos padre e hijo
todava tienen diferentes mscaras de seales y conjuntos de seales
pendientes. Por tanto, uno de ellos puede bloquear o desbloquear algunas
seales usando
.BR sigprocmask (2)
sin afectar al otro proceso.

Si no se pone
.BR CLONE_SIGHAND ,
el proceso hijo hereda una copia de los manejadores de seal del proceso
padre en el momento de ejecutar
.BR __clone .
Las llamadas a
.BR sigaction (2)
realizadas despus por uno de los procesos no tendrn efecto sobre el otro
proceso.

.TP
.B CLONE_PID
Si se pone
.BR CLONE_PID ,
se crea el proceso hijo con el mismo identificador de proceso que el proceso
padre.

Si no se pone
.BR CLONE_PID ,
el proceso hijo posee un identificador de proceso nico, distinto del
identificador del padre.

.BR
.SH "VALOR DEVUELTO"
En caso de xito, se devuelve el PID del hijo en el
hilo de ejecucin del padre. En caso de fallo, se devuelve \-1 
en el contexto del padre, no se crear
ningn proceso hijo y se asignar a la variable 
.I errno
un valor apropiado.
.SH ERRORES
.TP
.B EAGAIN
Se estn ejecutando ya demasiados procesos.
.TP
.B ENOMEM
.B __clone
no puede reservar suficiente memoria para obtener una estructura de tarea
(task structure) para el hijo o para copiar aquellas partes del contexto del
padre que necesitan ser copiadas.

.SH FALLOS

Desde la versin 2.1.97 del ncleo, no se debe usar la bandera
.B CLONE_PID
ya que otras partes del ncleo y la mayora del software del sistema todava
asumen que los identificadores de proceso son nicos.

No hay una entrada para
.B __clone
en la versin 5 de libc. libc 6 (o sea, glibc 2) proporciona una llamada
.B __clone
tal como la que se ha descrito en esta pgina de manual.

.SH CONFORME A
La llamada
.B __clone
es especfica de Linux y no debera usarse en aquellos programas que
pretendan se portables. Para programar aplicaciones con hilos (mltiples
hilos de control en el mismo espacio de memoria) es mejor usar una
biblioteca que implemente la API de hilos POSIX 1003.1c, como la biblioteca
LinuxThreads. Vea
.BR pthread_create (3thr).

Esta pgina de manual se corresponde con los ncleos 2.0.x y 2.1.x y con las
versiones 2.0.x de glibc.

.SH "VASE TAMBIN"
.BR fork (2),
.BR pthread_create (3thr).