Fork() et threads

Fork() et threads - C - Programmation

Marsh Posté le 15-07-2006 à 20:31:17    

Bonsoir à tous :)
 
J'ai une petite question qui peut sans doute surprendre, ou qui est peut être un peu idiote si la réponse est évidente.
 
Que se passe-t-il si je fais un fork() dans la procédure principale d'un thread (créé avec pthread_create() ) ?
 
A priori, l'entièreté du processus va se forker et l'éxécution du processus fils va continuer au sein de la suite du code constituant le thread qui a fait l'appel fork() .
 
Mais est ce bien comme ça ? a-t-il connaissance des autres threads ? Commencent-il tous à s'éxécuter dans le processus fils ? Ou bien a t on juste un nouveau processus (le fils) avec un seul thread ?
 
Merci :)

Reply

Marsh Posté le 15-07-2006 à 20:31:17   

Reply

Marsh Posté le 15-07-2006 à 20:38:48    

Au fait j'ai pensé à ceci :
 
pour des threads implémentés dans l'espace noyau (comme sous linux si je ne me trompe pas ) , le noyau peut voir lui même chaque thread comme des processus légers , et donc le fork ne concernerait qu'un seul des threads : le processus fils serait un processus monothread dont le thread principal exécute le code du thread depuis lequel le procesus parent à fait le fork()
 
par contre , pour des thread implémentés dans l'espace utilisateur, le noyau ne connait pas les threads et donc le fork() va dupliquer le processus dans son entièreté
 
Mais bon ce n'est qu'une hypothèse (quoique la deuxième me semble plus que probable...)

Reply

Marsh Posté le 15-07-2006 à 20:45:18    

Je pense avoir vu la réponse ici :
http://64.233.183.104/search?q=cac [...] =clnk&cd=1
 

Citation :


A process shall be created with a single thread. If a multi-threaded process calls fork(), the new process shall contain a replica of the calling thread and its entire address space, possibly including the states of mutexes and other resources. Consequently, to avoid errors, the child process may only execute async-signal-safe operations until such time as one of the exec functions is called. [THR]   Fork handlers may be established by means of the pthread_atfork() function in order to maintain application invariants across fork() calls.  
 
When the application calls fork() from a signal handler and any of the fork handlers registered by pthread_atfork() calls a function that is not asynch-signal-safe, the behavior is undefined.

Reply

Marsh Posté le 18-07-2006 à 06:29:44    


tu aurais eu la même réponse par

Code :
  1. man fork

  :)  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed