2011-04-18 5 views
0

Lorsqu'un processus parent crée un processus enfant avec fork(), selon moi, le processus de l'enfant est dans un état Running alors que le processus parent est dans un état Ready, à savoir attendre l'enfant à la fin.question sur la fourche()

Ai-je raison?

Répondre

0

Voici quelque chose

Après une fourchette(), il est indéterminée quel processus -le parent ou le enfant-next a accès au CPU.

Les applications qui reposent implicitement ou explicitement sur une séquence particulière d'exécution afin d'obtenir des résultats corrects sont ouverts à échec en raison de conditions course.

Il continue à pointer différents comportements dans différents noyaux. L'essentiel est que c'est défini par la mise en œuvre et ne doit pas être invoqué.

Aussi, si vous ne veulent compter sur elle, sous Linux depuis le 2.6.32 « il y a un sysctl pour que »

kernel.sched_child_runs_first 

Vive

3

Non, la branche crée une copie du parent.

Ensuite, vous teste généralement la valeur de retour de la fourche qui dit 0 = Je suis l'enfant, autre: Je suis le parent et l'enfant a la valeur de retour comme PID

Si le parent doit attendre l'enfant à la fin, vous devez utiliser la fonction d'attente.

Modifier:

voir http://linux.die.net/man/2/fork et http://linux.die.net/man/2/wait pour la fourche() en C.

+0

Merci pour votre réponse. Au niveau du sheduler, ces deux processus ne peuvent pas avoir l'état Running, donc l'un est en cours d'exécution, l'autre est prêt? – lilawood

+0

Cela dépend de ce que fait le processus. Mais en effet, si votre processeur exécute un seul processus à la fois, l'autre ne peut pas fonctionner aussi bien (ce qui signifie que c'est autre chose que l'état Prêt) –

+0

Logiquement et théoriquement, le processus enfant est en cours d'exécution et le parent est prêt (en attente pour la fin de l'enfant de devenir en cours d'exécution)? Merci ! – lilawood