|
|||||||
|
|
CLONESection: Systemaufrufe (2)Updated: 23. Januar 2001 Index Return to Main Contents BEZEICHNUNG__clone - Erzeugt einen KindprozeßÜBERSICHT#include <sched.h>int __clone(int (*fn) (void *arg), void *child_stack, int flags, void *arg) BESCHREIBUNG__clone erzeugt einen neuen Prozeß, ähnlich wie fork(2) dies tut. Im Gegensatz zu fork(2) erlaubt es __clone jedoch, daß der Kindprozeß Teile seines Kontextes mit dem Vaterprozeß teilt. Dazu zählen Speicherbereiche, die verwendeten Dateideskriptoren oder Signalhandler. __clone wird in erster Linie dazu benutzt, um Threads zu implementieren. Das sind mehrere parallel zueinander ablaufende Programmstränge eines Prozesses in einem gemeinsamen Speicherbereich.Wird ein Kindprozeß erzeugt, führt er das Funktionsprogramm fn(arg) aus. Das Argument fn zeigt auf eine Funktion, die vom Kindprozeß zu Beginn seiner Ausführung abgearbeitet wird. arg wird dieser Funktion als Argument übergeben. Kehrt die Funktion fn(arg) zurück, so beendet sich auch der gesamte Kindprozeß. Der Ganzzahlwert, der von fn zurückgeliefert wird, entspricht dem Exit-Code des Kindprozesses. Der Kindprozeß kann auch durch ein explizites exit(1) oder durch ein geeignetes Signal beendet werden. Das Argument child_stack bestimmt den Ort des Stapelspeichers, der vom Kindprozeß verwendet wird. Da Vater- und Kindprozeß sich Speicherbereiche teilen können, ist es im allgemeinen nicht möglich, beide auf demselben Stapelspeicher ablaufen zu lassen. Der Vaterprozeß muß daher einen Speicherbereich als Stapelspeicher für den Kindprozeß bereithalten und einen Zeiger darauf via __clone an den Kindprozeß übergeben. Mit Ausnahme von HP PA-Maschinen wächst der Stapelspeicher auf allen von Linux unterstützten Prozessoren nach unten, so daß child_stack für gewöhnlich auf die oberste Adresse im bereitgehaltenen Speicherbereich zeigt. Das untere Byte von flags enthält die Nummer des Signals, das bei Beendigung des Kindprozesses an den Vaterprozeß geschickt werden soll. flags kann darüber hinaus noch durch bitweises Oder mit den folgenden Konstanten verknüpft werden. Dadurch wird festgelegt, welche Ressourcen Vater- und Kindprozeß sich teilen.
RÜCKGABEWERTIst __clone erfolgreich, wird im Vaterprozeß die Prozeßkennung des Kindprozesses zurückgegeben. Im Kindprozeß wird 0 zurückgeliefert. Im Fehlerfall wird -1 zurückgegeben, es wird kein Kindprozeß erzeugt, und errno wird entsprechend der Fehlerursache gesetzt.FEHLER
BUGSAb Kernelversion 2.1.97 sollte CLONE_PID nicht mehr verwendet werden, da Teile des Betriebssystems und der Großteil der Systemprogramme von eindeutigen Prozeßkennungen ausgehen.Version 5 der libc kennt keinen __clone-Aufruf. Die Nachfolgerversion libc6 (auch glibc2 genannt) stellt __clone in der hier beschriebenen Form zur Verfügung. KONFORM ZUDer __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 zurückgegriffen werden, die eine POSIX-1003.1c-konforme Programmierschnittstelle bereitstellen. Dazu zählen die in libc6/glibc2 enthaltenen LinuxThreads. Siehe pthread_create(3thr).Diese Dokumentation basiert auf den Kernelversionen 2.0.x und 2.1.x sowie glibc 2.0.x. SIEHE AUCHfork(2), pthread_create(3thr)
Index | ||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "Linuxinfor Man Pages in HTML Format: man2". See Index Page for more info about Authorship and Copyright. 1999-2008 Linuxinfor.com. No rights reserved. |