File: clone.2

package info (click to toggle)
manpages-de 0.5-4.2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 3,768 kB
  • ctags: 9
  • sloc: makefile: 86
file content (224 lines) | stat: -rw-r--r-- 7,242 bytes parent folder | download | duplicates (2)
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 <michael@moria.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>
.\" Modified 25 april 1998 by Xavier Leroy <Xavier.Leroy@inria.fr>
.\" Translated into german by Daniel Kobras (kobras@linux.de)
.\"
.TH CLONE 2 "23. Januar 2001" "Linux 2.0.33" "Systemaufrufe"
.SH BEZEICHNUNG
__clone \- Erzeugt einen Kindprozess
.SH "BERSICHT"
.B #include <sched.h>
.sp
.BI "int __clone(int (*" "fn" ") (void *" "arg" "), void *" "child_stack" ", int " "flags" ", void *" "arg" ")"

.SH BESCHREIBUNG
.B __clone
erzeugt einen neuen Prozess, hnlich wie
.BR fork (2)
dies tut.  Im Gegensatz zu
.BR fork (2)
erlaubt es
.B __clone
jedoch, dass der Kindprozess Teile seines Kontextes mit dem Vaterprozess teilt.
Dazu zhlen Speicherbereiche, die verwendeten Dateideskriptoren oder
Signalhandler.
.B __clone
wird in erster Linie dazu benutzt, um Threads zu implementieren. Das sind
mehrere parallel zueinander ablaufende Programmstrnge eines Prozesses in
einem gemeinsamen Speicherbereich.
.PP
Wird ein Kindprozess erzeugt, fhrt er das Funktionsprogramm
.IR fn ( arg )
aus. Das Argument
.I fn
zeigt auf eine Funktion, die vom Kindprozess zu Beginn seiner Ausfhrung 
abgearbeitet wird.
.I arg
wird dieser Funktion als Argument bergeben.
.PP
Kehrt die Funktion
.IR fn ( arg )
zurck, so beendet sich auch der gesamte Kindprozess. Der Ganzzahlwert,
der von
.I fn
zurckgeliefert wird, entspricht dem Exit-Code des Kindprozesses. Der
Kindprozess kann auch durch ein explizites
.BR exit (1)
oder durch ein geeignetes Signal beendet werden.
.PP
Das Argument
.I child_stack
bestimmt den Ort des Stapelspeichers, der vom Kindprozess verwendet wird.
Da Vater- und Kindprozess sich Speicherbereiche teilen knnen, ist es im
allgemeinen nicht mglich, beide auf demselben Stapelspeicher ablaufen
zu lassen. Der Vaterprozess muss daher einen Speicherbereich als
Stapelspeicher fr den Kindprozess bereithalten und einen Zeiger darauf via
.B __clone
an den Kindprozess bergeben. Mit Ausnahme von HP PA-Maschinen wchst der
Stapelspeicher auf allen von Linux untersttzten Prozessoren nach unten,
so dass
.I child_stack
fr gewhnlich auf die oberste Adresse im bereitgehaltenen Speicherbereich
zeigt.
.PP
Das untere Byte von
.I flags
enthlt die Nummer des Signals, das bei Beendigung des Kindprozesses an
den Vaterprozess geschickt werden soll.
.I flags
kann darber hinaus noch durch bitweises Oder mit den folgenden Konstanten
verknpft werden. Dadurch wird festgelegt, welche Ressourcen Vater- und
Kindprozess sich teilen.
.PP
.TP
.B CLONE_VM
Ist
.B CLONE_VM
gesetzt, laufen Vater- und Kindprozess im selben Adressraum. Insbesondere
ist das Resultat von Schreibzugriffen eines Prozesses in den gemeinsamen
Speicher auch vom anderen Prozess aus sichtbar. Zudem gilt jede
Vernderung der Speichermappings durch
.BR mmap (2)
oder
.BR munmap (2)
fr beide Prozesse.

Ist
.B CLONE_VM
nicht gesetzt, erhlt der Kindprozess seinen eigenen Adressraum. Wie auch bei
.BR fork (2)
bleiben Schreibzugriffe auf den Speicher oder nderungen am Speichermapping
auf den jeweiligen Prozess beschrnkt.
.PP
.TP
.B CLONE_FS
Ist
.B CLONE_FS
gesetzt, teilen sich Vater- und Kindprozess ihre Informationen ber das
Dateisystem. Dazu zhlen der Ort des Wurzelverzeichnisses, das aktuelle
Arbeitsverzeichnis und die Maske der Dateizugriffsrechte. Jeder Aufruf von
.BR chroot (2),
.BR chdir (2)
oder
.BR umask (2)
durch entweder den Vater- oder den Kindprozess beeinflusst auch die
Informationen des jeweils anderen Prozesses.

Ist
.B CLONE_FS
nicht gesetzt, erhlt der Kindprozess von
.B __clone
eine Kopie der Dateisysteminformationen. Aufrufe von
.BR chroot (2),
.BR chdir (2)
und
.BR umask (2)
beeinflussen daraufhin lediglich einen der beiden Prozesse.
.PP
.TP
.B CLONE_FILES
Ist
.B CLONE_FILES
gesetzt, teilen sich Vater- und Kindprozess ihre Dateideskriptoren. Sie
verweisen stets auf dieselbe Datei, sowohl im Vater-, als auch im
Kindprozess. Jeder Deskriptor, der in einem der beiden Prozesse erzeugt
wird, ist auch im anderen Prozess gltig. Ebenso wirkt sich das Schlieen
eines Deskriptors oder das ndern der Attribute auf beide Prozesse
zugleich aus.

Ist
.B CLONE_FILES
nicht gesetzt, erhlt der Kindprozess durch
.B __clone
eine Kopie der aktuell geffneten Dateideskriptoren. Alle anschlieend
durchgefhrten Operationen auf die Deskriptoren bleiben auf den jeweiligen
Prozess beschrnkt.
.PP
.TP
.B CLONE_SIGHAND
Ist
.B CLONE_SIGHAND
gesetzt, teilen sich Vater- und Kindprozess die Tabelle der Signalhandler.
Ruft einer der beiden Prozesse
.BR sigaction (2)
auf, um das Antwortverhalten auf ein Signal zu verndern, so betrifft dies
auch den anderen Prozess. Jedoch besitzen Vater- und Kindprozess nach wie vor
getrennte Signalmasken und getrennte Listen der noch unbearbeiteten Signale.
Einzelne Signale knnen daher durch Aufruf von
.BR sigprocmask (2)
lokal fr einen Prozess geblockt oder zugelassen werden.

Ist
.B CLONE_SIGHAND
nicht gesetzt, erhlt der Kindprozess durch den
.BR __clone -Aufruf
eine Kopie des Signalhandlers. Ein nachfolgendes
.BR sigaction (2)
betrifft dann nur noch den aufrufenden Prozess.
.PP
.TP
.B CLONE_PID
Ist
.B CLONE_PID
gesetzt, erhlt der Kindprozess dieselbe Prozesskennung wie der Vaterprozess.

Ist
.B CLONE_PID
nicht gesetzt, erhlt der Kindprozess eine eigene Prozesskennung, unabhngig
von der Kennung des Vaterprozesses.
.PP
.SH "RCKGABEWERT"
Ist
.B __clone
erfolgreich, wird im Vaterprozess die Prozesskennung des Kindprozesses
zurckgegeben. Im Kindprozess wird 0 zurckgeliefert. Im Fehlerfall wird
\-1 zurckgegeben, es wird kein Kindprozess
erzeugt, und
.I errno
wird entsprechend der Fehlerursache gesetzt.
.PP
.SH FEHLER
.TP
.B EAGAIN
Augenblicklich laufen zu viele andere Prozesse.
.TP
.B ENOMEM
.B __clone
ist nicht in der Lage, ausreichend viel Speicher anzufordern
fr die Verwaltungsstrukturen des Kindprozesses oder fr die zu kopierenden
Bereiche aus der Vaterumgebung.
.PP
.SH BUGS
Ab Kernelversion 2.1.97 sollte
.B CLONE_PID
nicht mehr verwendet werden, da Teile des Betriebssystems und der Groteil
der Systemprogramme von eindeutigen Prozesskennungen ausgehen.
.PP
Version 5 der libc kennt keinen
.BR __clone -Aufruf.
Die Nachfolgerversion libc6 (auch glibc2 genannt) stellt
.B __clone
in der hier beschriebenen Form zur Verfgung.
.PP
.SH "KONFORM ZU"
Der
.BR __clone -Aufruf
ist Linux-spezifisch und sollte nicht in als portabel geltenden Programmen
eingesetzt werden. Um Programme auf Thread-Basis zu entwickeln, sollte statt
dessen auf Bibliotheksfunktionen zurckgegriffen werden, die eine
POSIX-1003.1c-konforme Programmierschnittstelle bereitstellen. Dazu zhlen
die in libc6/glibc2 enthaltenen LinuxThreads. Siehe
.BR pthread_create (3thr).
.PP
Diese Dokumentation basiert auf den Kernelversionen 2.0.x und 2.1.x sowie
glibc 2.0.x.
.SH "SIEHE AUCH"
.BR fork (2),
.BR pthread_create (3thr)