Si j'ai un programme fonctionnant avec des threads et que j'appelle fork()
sur un système basé sur Unix, les threads sont-ils copiés? Je sais que la mémoire virtuelle du processus actuel est copiée 1: 1 dans le nouveau processus généré. Je sais que les threads ont leur propre pile dans la mémoire virtuelle d'un processus. Ainsi, au moins la pile de threads doit également être copiée. Cependant, je ne sais pas s'il y a quelque chose de plus dans les threads qui ne réside pas dans la mémoire virtuelle et n'est donc PAS copié. Si ce n'est pas le cas, les deux processus partagent-ils les threads ou sont-ils des copies indépendantes?
De la base Open Group Spécifications Numéro 7, édition de 2018 fourche :
la source
A l'origine, "fork" a été atteint en écrivant la tâche sur le disque puis, plutôt que de lire dans un thread différent (ce qui serait fait si vous échangiez la tâche avec une autre), en modifiant l'ID de tâche de l'image toujours en mémoire et en continuant avec son exécution (comme la nouvelle tâche). Il s'agissait d'une modification très simple du mécanisme de commutation de tâche de base, où une seule tâche occupait la mémoire RAM à la fois.
Bien sûr, à mesure que la gestion de la mémoire devenait plus élaborée, ce schéma a été modifié pour s'adapter au nouvel environnement.
la source