Quelle est la différence entre fork()
y vfork()
? Est-ce que vfork()
retourner comme fork()
.
Réponse
Trop de publicités?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.
- Réponses précédentes
- Plus de réponses