Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] clone - Créer un processus fils (child). [size=18] [b]Résumé[/b] [/size] [b]#include
[/b] [b][i]int clone(int (* fn ) (void * arg ), void * pile_fils , int flags , void * arg )[/i][/b] [b][i]_syscall2(int, clone , int, flags , void *, pile_fils );[/i][/b] [size=18] [b]Description[/b] [/size] [b]clone[/b] crée un nouveau processus, exactement comme le fait [b]fork (2).[/b] [b]clone[/b] est une fonction de bibliothèque s'appuyant sur l'appel-système [b]sys_clone[/b] sous-jacent. Une description de [b]sys_clone[/b] se trouve plus bas sur cette page. Contrairement à [b]fork (2),[/b] cette routine permet le partage d'une partie du contexte d'exécution entre le processus fils et le processus appelant. Le partage peut s'appliquer sur l'espace mémoire, sur la table des descripteurs de fichiers, la table des gestionnaires de signaux... (Notez que sur cette page de manuel, le "processus appelant" correspond normalement au "processus père", mais voyez quand même la description de [b]CLONE_PARENT[/b] plus bas). L'appel système [b]clone[/b] est principalement utilisé pour permettre l'implémentation des threads : un programme est scindé en plusieurs lignes de contrôle, s'exécutant simultanément dans un espace mémoire partagé. Quand le processus fils est créé, avec [b]clone ,[/b] il exécute la fonction [b]fn ( arg )[/b] de l'application. (Ceci est différent de [b]fork (2)[/b] avec lequel l'exécution continue dans le fils au point de l'appel [b]fork )[/b] L'argument [i]fn[/i] est un pointeur sur la fonction appelée par le processus fils lors de son démarrage. L'argument [i]arg[/i] est transmis à la fonction [i]fn[/i] lors de son invocation. Quand la fonction [b]fn ( arg )[/b] revient, le processus fils se termine. La valeur entière renvoyée par [i]fn[/i] est utilisée comme code de retour du processus fils. Ce dernier peut également se terminer de manière explicite en invoquant la fonction [b]exit (2)[/b] ou après la réception d'un signal fatal. L'argument [i]pile_fils[/i] indique l'emplacement de la pile utilisée par le processus fils. Comme les processus fils et appelant peuvent partager de la mémoire, il n'est généralement pas possible pour le fils d'utiliser la même pile que son père. Le processus appelant doit donc préparer un espace mémoire pour stocker la pile de son fils, et transmettre à [b]clone[/b] un pointeur sur cet emplacement. Les piles croissent vers le bas sur tous les processeurs implémentant Linux (sauf le HP PA), donc [i]pile_fils[/i] doit pointer sur la plus haute adresse de l'espace mémoire prévu pour la pile du processus fils. L'octet de poids faible de [i]flags[/i] contient le numéro du signal qui sera envoyé au père lorsque le processus fils se terminera. Si ce signal est différent de [b]SIGCHLD ,[/b] le processus parent doit également spécifier les options [b]__WALL[/b] ou [b]__WCLONE[/b] lorsqu'il attend la fin du fils avec [b]wait (2).[/b] Si aucun signal n'est indiqué, le processus parent ne sera pas notifié de la terminaison du fils. [i]flags[/i] permet également de préciser ce qui sera partagé entre le père et le fils, en effectuant un OU binaire entre une ou plusieurs des constantes suivantes : [b]CLONE_PARENT[/b] [table][row][col] [/col][col](nouveauté Linux 2.4) Si [b]CLONE_PARENT[/b] est présent, le père du nouveau fils (comme il est indiqué par [b]getppid (2))[/b] sera le même que celui du processus appelant. Si [b]CLONE_PARENT[/b] n'est pas fourni, alors (comme pour [b]fork (2))[/b] le père du processus fils sera le processus appelant. Remarquez que c'est le processus père, tel qu'indiqué par [b]getppid (2),[/b] qui est notifié lors de la fin du fils. Ainsi si [b]CLONE_PARENT[/b] est présent, alors c'est le père du processus appelant, et non ce dernier, qui sera notifié. [/col][/row][/table] [b]CLONE_FS[/b] [table][row][col] [/col][col]Si l'attribut [b]CLONE_FS[/b] est positionné, les processus appelant et fils partagent les mêmes informations concernant le système de fichiers. Ceci inclue la racine du système de fichiers, le répertoire de travail, et l'umask. Tout appel à [b]chroot (2),[/b] [b]chdir (2),[/b] ou [b]umask (2)[/b] effectué par un processus aura également influence sur l'autre processus. Si [b]CLONE_FS[/b] n'est pas choisi, le processus travaille sur une copie des informations de l'appelant concernant le système de fichiers. Cette copie est effectuée lors de l'invocation de [b]clone .[/b] Les appels à [b]chroot (2),[/b] [b]chdir (2),[/b] [b]umask (2)[/b] effectués par un processus n'affectent pas l'autre processus. [/col][/row][/table] [b]CLONE_FILES[/b] [table][row][col] [/col][col]Si l'attribut [b]CLONE_FILES[/b] est positionné, les processus appelant et fils partagent la même table des descripteurs de fichiers. Les descripteurs feront alors toujours référence aux mêmes fichiers pour les deux processus. Tout descripteur créé par un processus est également valide pour l'autre processus. De même si un processus ferme un descripteur, ou modifie ses attributs, l'autre processus en est aussi affecté. Si [b]CLONE_FILES[/b] n'est pas positionné, le processus fils hérite d'une copie des descripteurs de fichiers ouverts par l'appelant au moment de l'appel [b]clone .[/b] Les opérations effectuées ensuite sur un descripteur par un des processus n'affectent pas l'autre processus. [/col][/row][/table] [b]CLONE_NEWNS[/b] [table][row][col] [/col][col](Nouveauté Linux 2.4.19) Démarrer le processus dans un nouvel espace de noms. Chaque processus se trouve dans un espace de noms. Cet [i]espace de noms[/i] du processus regroupe les données décrivant la hiérarchie des fichiers vus par le processus (l'ensemble des montages). Après un [b]fork (2)[/b] ou [b]clone (2)[/b] sans l'attribut [b]CLONE_NEWNS[/b] le fils se déroule dans le même espace de nom que son père. Les appels-système [b]mount (2)[/b] et [b]umount (2)[/b] modifient l'espace de noms du processus appelant, et affectent ainsi tous les processus se déroulant dans le même espace, sans affecter les processus se trouvant dans d'autres espaces. Après un [b]clone (2)[/b] avec l'attribut [b]CLONE_NEWNS[/b] le fils cloné démarre dans un nouvel espace de noms, initialisé avec une copie de l'espace du père. Seul un processus privilégié peut spécifier l'attribut [b]CLONE_NEWNS .[/b] Il n'est pas possible de spécifier à la fois [b]CLONE_NEWNS[/b] et [b]CLONE_FS[/b] pour le même appel [b]clone .[/b] [/col][/row][/table] [b]CLONE_SIGHAND[/b] [table][row][col] [/col][col]Si l'attribut [b]CLONE_SIGHAND[/b] est positionné, les processus appelant et fils partagent la même table des gestionnaires de signaux. Si l'appelant, ou le fils, appelle [b]sigaction (2)[/b] pour modifier le comportement associé à un signal, ce comportement est également changé pour l'autre processus. Néanmoins, l'appelant et le fils ont toujours des masques de signaux distincts, et leurs ensembles de signaux bloqués sont indépendants. L'un des processus peut donc bloquer un signal en utilisant [b]sigprocmask (2)[/b] sans affecter l'autre processus. Si [b]CLONE_SIGHAND[/b] n'est pas utilisé, le processus fils hérite d'une copie des gestionnaires de signaux de l'appelant lors de l'invocation de [b]clone .[/b] Les appels à [b]sigaction (2)[/b] effectués ensuite depuis un processus n'ont pas d'effets sur l'autre processus. [/col][/row][/table] [b]CLONE_PTRACE[/b] [table][row][col] [/col][col]Si l'attribut [b]CLONE_PTRACE[/b] est positionné et si l'appelant est suivi par un débogueur, alors le fils sera également suivi (voir [b]ptrace (2)).[/b] [/col][/row][/table] [b]CLONE_VFORK[/b] [table][row][col] [/col][col]Si le bit [b]CLONE_VFORK[/b] est actif, l'exécution du processus appelant est suspendue jusqu'à ce que le fils libère ses ressources de mémoire virtuelle par un appel [b]execve (2)[/b] ou [b]_exit (2)[/b] (comme avec [b]vfork (2)).[/b] Si [b]CLONE_VFORK[/b] n'est pas indiqué, alors les deux processus sont ordonnancés à partir de la fin de l'appel, et l'application ne doit pas considéré que l'ordre d'exécution soit déterminé. [/col][/row][/table] [b]CLONE_VM[/b] [table][row][col] [/col][col]Si le bit [b]CLONE_VM[/b] est actif, les processus père et fils s'exécutent dans le même espace mémoire. En particulier, les écritures en mémoire effectuées par l'un des processus sont visibles par l'autre. De même toute projection en mémoire, ou toute suppression de projection, effectuées avec [b]mmap (2)[/b] ou [b]munmap (2)[/b] par l'un des processus affectera également l'autre processus. Si [b]CLONE_VM[/b] n'est pas actif, le processus fils utilisera une copie distincte de l'espace mémoire de l'appelant. Le cliché étant réalisé lors de l'invocation de [b]clone .[/b] Les écritures ou les projections de fichiers en mémoire effectuées par un processus n'affectent pas l'autre processus, comme cela se passe avec [b]fork (2).[/b] [/col][/row][/table] [b]CLONE_PID[/b] [table][row][col] [/col][col]Si l'attribut [b]CLONE_PID[/b] est positionné, les processus appelant et fils ont le même numéro de processus. Si [b]CLONE_PID[/b] n'est pas sélectionné, le processus fils possède un identificateur unique, distinct de celui de l'appelant. Cet attribut ne peut être utilisé que par le processus de démarrage du système (PID 0). [/col][/row][/table] [b]CLONE_THREAD[/b] [table][row][col] [/col][col](Nouveauté Linux 2.4) Si [b]CLONE_THREAD[/b] est présent, le fils est placé dans le même groupe de threads que le processus appelant. Si [b]CLONE_THREAD[/b] n'est pas indiqué, alors le fils est placé dans son propre (nouveau) groupe de threads, dont l'identificateur est identique au PID. (Les groupes de threads sont une fonctionnalité ajoutées dans Linux 2.4 pour supporter la notion POSIX d'ensemble de threads partageant un même PID. Sous Linux 2.4, l'appel [b]getpid (2)[/b] renvoie l'identificateur du groupe de thread de l'appelant). [/col][/row][/table] [b]Sys_clone[/b] L'appel-système [b]sys_clone[/b] ressemble plus à [b]fork (2),[/b] en ceci que l'exécution dans le processus fils continue à partir du point d'appel. Ainsi [b]sys_clone[/b] ne nécessite que les arguments [i]flags[/i] et [i]pile_fils[/i] qui ont la même signification que pour [b]clone.[/b] (Notez que l'ordre de ces arguments est différent de celui dans [b]clone ).[/b] Une autre différence : pour [b]sys_clone ,[/b] l'argument [i]pile_fils[/i] peut être nul, puisque la sémantique de copie-en-écriture assure que le fils recevra une copie indépendante des pages de la pile dès qu'un des deux processus la modifiera. Pour que cela fonctionne, il faut naturellement que [b]CLONE_VM[/b] ne soit PAS présent. [size=18] [b]Valeur renvoyée[/b] [/size] En cas de réussite, le PID du processus fils est renvoyé dans le fil d'exécution de l'appelant. En cas d'échec, -1 est renvoyé dans le contexte de l'appelant, aucun fils n'est créé, et [i]errno[/i] contiendra le code d'erreur. [size=18] [b]Erreurs[/b] [/size] [b]EAGAIN[/b] [table][row][col] [/col][col]Trop de processus en cours d'exécution.[/col][/row][/table] [b]ENOMEM[/b] [table][row][col] [/col][col]Pas assez de mémoire pour copier les parties du contexte du processus appelant qui doivent être dupliquée, ou pour allouer une structure de tâche pour le processus fils.[/col][/row][/table] [b]EINVAL[/b] [table][row][col] [/col][col]Renvoyée par [b]clone[/b] quand une valeur nulle a été indiquée pour le paramètre [b]pile_fils .[/b][/col][/row][/table] [b]EINVAL[/b] [table][row][col] [/col][col]Les attributs [b]CLONE_NEWNS[/b] et [b]CLONE_FS[/b] ont été indiqués simultanément dans [b]flags .[/b][/col][/row][/table] [b]EINVAL[/b] [b]CLONE_THREAD[/b] [table][row][col] [/col][col]a été spécifié mais pas [b]CLONE_SIGHAND[/b] (depuis Linux 2.5.35).[/col][/row][/table] [b]EPERM[/b] [b]CLONE_PID[/b] [table][row][col] [/col][col]a été réclamé par un processus au PID non-nul.[/col][/row][/table] [/col][/row][/table] [size=18] [b]Bugs[/b] [/size] [table][row][col] [/col][col]Dans la version 2.1.97 du noyau, l'attribut [b]CLONE_PID[/b] ne doit pas être utilisé, car d'autres parties du noyau et certaines applications considèrent que le PID est unique. Il n'y a pas de définition pour [b]clone[/b] dans la libc version 5. La version 6 (GlibC 2) fournit une définition de [b]clone[/b] comme décrit ici. [size=18] [b]Notes[/b] [/size] Pour les noyaux 2.4.7-2.4.18 l'attribut CLONE_THREAD entraîne l'attribut CLONE_PARENT. [size=18] [b]Conformité[/b] [/size] Les appels-système [b]clone[/b] et [b]sys_clone[/b] sont spécifiques à Linux et ne doivent pas être employés dans des programmes portables. Pour programmer des applications multithreads, il vaut mieux employer une bibliothèque qui implémente l'API des Threads Posix 1003.1c comme la bibliothèque LinuxThreads (incluse dans la GlibC 2). Voir [b]pthread_create (3thr).[/b] Cette page de manuel correspond aux noyaux 2.0.x, 2.1.x, 2.2.x, 2.4.x et aux GlibC 2.0.x et 2.1.x. [size=18] [b]Voir aussi[/b] [/size] [b]fork (2),[/b] [b]wait (3),[/b] [b]pthread_create (3).[/b] [size=18] [b]Traduction[/b] [/size] Christophe Blaess, 1996-2003.
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?