Enfant, Relation Parent et de l'Héritage en C
Je suis totalement nouveau avec C.
- Quels sont les éléments de processus qui sont hérités chez l'enfant créé à l'aide de
fork();
? - Quels sont les éléments de processus qui sont différentes du processus parent?
Quoi? Veuillez reformuler cette question; il n'a pas de sens.
Fait sens pour moi...
Robinson, Il ne fait sens, mais il est terriblement formulée. @John se demander, quel est le contenu de
Mes commentaires ont précédé la modifier.
Fait sens pour moi...
Robinson, Il ne fait sens, mais il est terriblement formulée. @John se demander, quel est le contenu de
man 2 fork
.Mes commentaires ont précédé la modifier.
OriginalL'auteur John | 2011-02-16
Vous devez vous connecter pour publier un commentaire.
Cela n'a pas eu beaucoup à faire avec le C, plutôt avec
fork()
, qui est une POSIX appel système (et je suppose que cela pourrait se comporter différemment sur les différents systèmes).Je vous suggère de lire le
fork
manuel, ce qui est vraiment clair à ce sujet:Si vous êtes intéressé à propos de Linux, vous devez également vérifier la
clone
appel système, qui permet d'indiquer avec plus de précision ce que vous voulez.fork
manuel. POSIX manuel est disponible à l'adresse pubs.opengroup.org/onlinepubs/9699919799/functions/fork.htmlpar sémaphore ajustements de vous dire si j'ai une fourche à l'intérieur d'une région verrouillée de l'enfant n'a pas encore appartiennent à cette région verrouillée droit? L'enfant n'hérite le sémaphore bien que si il a été créé avant fourche
OriginalL'auteur peoro
La fourche(2) page de man sur votre système (
man fork
) devrait vous donner plus de détails mais en général, l'enfant hérite de l'objet parent, liste de descripteurs de fichiers, y compris les fichiers ouverts, les sockets et les processus de poignées.De mon système de l'homme page (Mac OS X 10.6.6):
OriginalL'auteur maerics
Voir le description officielle de la fourche(2)
OriginalL'auteur Steve Emmerson
Il n'est pas orientée objet, l'héritage de C.
Fourche qui pratiquent dans C est essentiellement le processus d'être arrêté alors qu'il est en cours d'exécution, et une copie de leur mise en (efficacement) un autre espace mémoire, puis les deux processus dit de continuer. Ils seront tous deux poursuivre d'où le parent a été mise en pause. La seule façon vous pouvez dire ce qui vous est de vérifier la valeur de retour de la
fork()
appel.Dans une telle situation, l'enfant n'a pas vraiment d'hériter de tout, depuis le processus parent, c'est comme s'il obtient une copie complète de tout ce que le parent avait.
Ce n'est pas vrai. Vous pouvez fourche sans un exec(). Vous ne pouvez pas obtenir le fork()'d le processus à exécuter n'importe quel code autre que le processus parent de code. exec() se superpose le processus avec les "quelques autres", restaure les registres et modifie le pointeur d'instruction à commencer par la "nouvellement copiés dans le processus" du code. Exec() n'est pas nécessaire de "poursuivre le traitement" à la société mère ou à l'enfant.
oui, vous êtes vrai, mais qu'est-ce que l'utilisation de la création d'un processus enfant qui ne dispose pas de son propre code et le segment de données.parce que dans la fourchette nous ne spécifiez pas le programme qui doit être converti dans un processus, il ne ferait aucun sens seul à avoir l'appel système fork ().Pouvez-vous donner l'exemple quand il serait bénéfique uniquement pour l'utilisation de la fourche mais pas exec()de la famille des appels système.
Il existe de nombreux programmes qui peuvent bénéficier de bifurquer sans exec de superposition. Fondamentalement, tout le diviser et conquérir des solutions besoin de la même "code client" avec le parent de code étant le point de coordination. OSCAR (le clustering suite) serait un plaisir de déplacer les enfants des processus pour libérer les nœuds de calcul, de sorte que seule une simple fourchette serait nécessaire. Aussi, pourquoi voudriez-vous exec sur un tas de programmes en cours d'exécution en coordination pour traiter la même question (peut-être pour la redondance) de toute façon?
Je sais que c'est vieux, mais des exemples de fork() et pas de exec() - serveur web apache, qui a un seul parent, et plusieurs enfants dont les demandes de service. Aussi sshd utilise fork() sans exec à l'aide de la sécurité. Juste parce que vous avez le même code ne signifie pas que vous ne le même chemin d'accès du code.
OriginalL'auteur Edwin Buck
Les seules choses que des enfants qui sont différents de ses parents sont ses
PPID je.e parent id de processus et
PID id de processus.
Et quand il s'agit de la similitude des processus fils hérite de son parent table de DESCRIPTEURS de FICHIER ainsi, vous verriez qu'toujours trois DESCRIPTEURS de FICHIER de l'enfant sont toujours occupés qui correspondent à STDIN,STDOUT et STDERR.
OriginalL'auteur Algorithmist