37 votes

Quelle est la différence entre fork() et vfork() ?

Quelle est la différence entre fork() y vfork() ? Est-ce que vfork() retourner comme fork() .

1voto

Rajesh Pal Points 80

La différence fondamentale entre les deux est que lorsqu'un nouveau processus est créé avec l'option vfork() le processus parent est temporairement suspendu et le processus enfant peut emprunter l'espace d'adressage du parent. Cet étrange état de fait se poursuit jusqu'à ce que le processus enfant quitte, ou appelle execve() Le processus de parentage se poursuit alors.

Cela signifie que le processus enfant d'un vfork() doivent faire attention à éviter de modifier inopinément les variables du processus parent. Dans En particulier, le processus enfant ne doit pas retourner de la fonction contenant la vfork() et il ne doit pas appeler exit() (si elle a besoin de sortir, elle devrait utiliser _exit(); en fait, c'est aussi vrai pour l'enfant d'un normal fork() ).

Toutefois, étant donné que vfork() a été introduit, le mise en œuvre de fork() s'est considérablement amélioré, notamment avec l'introduction du "copy-on-write", où la copie de la l'espace d'adressage du processus est simulé de manière transparente en permettant aux deux processus de se référer à la même mémoire physique jusqu'à ce que l'un d'eux la modifie. la modifie. Cela supprime en grande partie la justification de vfork(); en effet, un En effet, une grande partie des systèmes n'ont plus la fonctionnalité originale de l'ordinateur. vfork() complètement. Pour la compatibilité, cependant, il peut encore y avoir a vfork() présent, qui appelle simplement fork() sans sans essayer d'émuler tous les vfork() sémantique.

Par conséquent, il est très peu judicieux d'utiliser réellement les différences entre fork() y vfork() . En effet, il est probablement peu judicieux d'utiliser vfork() du tout, sauf si vous savez exactement pourquoi vous le voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X