File: clone.2

package info (click to toggle)
manpages-de 0.4-8
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,808 kB
  • ctags: 4
  • sloc: sh: 7,666; makefile: 60
file content (224 lines) | stat: -rw-r--r-- 7,193 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 Kindproze
.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 Proze, hnlich wie
.BR fork (2)
dies tut.  Im Gegensatz zu
.BR fork (2)
erlaubt es
.B __clone
jedoch, da der Kindproze Teile seines Kontextes mit dem Vaterproze 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 Kindproze erzeugt, fhrt er das Funktionsprogramm
.IR fn ( arg )
aus. Das Argument
.I fn
zeigt auf eine Funktion, die vom Kindproze 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 Kindproze. Der Ganzzahlwert,
der von
.I fn
zurckgeliefert wird, entspricht dem Exit-Code des Kindprozesses. Der
Kindproze 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 Kindproze verwendet wird.
Da Vater- und Kindproze sich Speicherbereiche teilen knnen, ist es im
allgemeinen nicht mglich, beide auf demselben Stapelspeicher ablaufen
zu lassen. Der Vaterproze mu daher einen Speicherbereich als
Stapelspeicher fr den Kindproze bereithalten und einen Zeiger darauf via
.B __clone
an den Kindproze bergeben. Mit Ausnahme von HP PA-Maschinen wchst der
Stapelspeicher auf allen von Linux untersttzten Prozessoren nach unten,
so da
.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 Vaterproze 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
Kindproze sich teilen.
.PP
.TP
.B CLONE_VM
Ist
.B CLONE_VM
gesetzt, laufen Vater- und Kindproze im selben Adreraum. Insbesondere
ist das Resultat von Schreibzugriffen eines Prozesses in den gemeinsamen
Speicher auch vom anderen Proze 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 Kindproze seinen eigenen Adreraum. Wie auch bei
.BR fork (2)
bleiben Schreibzugriffe auf den Speicher oder nderungen am Speichermapping
auf den jeweiligen Proze beschrnkt.
.PP
.TP
.B CLONE_FS
Ist
.B CLONE_FS
gesetzt, teilen sich Vater- und Kindproze 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 Kindproze beeinflut auch die
Informationen des jeweils anderen Prozesses.

Ist
.B CLONE_FS
nicht gesetzt, erhlt der Kindproze 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 Kindproze ihre Dateideskriptoren. Sie
verweisen stets auf dieselbe Datei, sowohl im Vater-, als auch im
Kindproze. Jeder Deskriptor, der in einem der beiden Prozesse erzeugt
wird, ist auch im anderen Proze 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 Kindproze durch
.B __clone
eine Kopie der aktuell geffneten Dateideskriptoren. Alle anschlieend
durchgefhrten Operationen auf die Deskriptoren bleiben auf den jeweiligen
Proze beschrnkt.
.PP
.TP
.B CLONE_SIGHAND
Ist
.B CLONE_SIGHAND
gesetzt, teilen sich Vater- und Kindproze 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 Proze. Jedoch besitzen Vater- und Kindproze 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 Proze geblockt oder zugelassen werden.

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

Ist
.B CLONE_PID
nicht gesetzt, erhlt der Kindproze eine eigene Prozekennung, unabhngig
von der Kennung des Vaterprozesses.
.PP
.SH "RCKGABEWERT"
Ist
.B __clone
erfolgreich, wird im Vaterproze die Prozekennung des Kindprozesses
zurckgegeben. Im Kindproze wird 0 zurckgeliefert. Im Fehlerfall wird
\-1 zurckgegeben, es wird kein Kindproze
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 Prozekennungen 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)