web-dev-qa-db-fra.com

Combien de processus sont créés avec ces instructions fork ()?

Je crois que cela crée 24 processus; Cependant, j'ai besoin d'une vérification. Ces questions m'étouffent souvent. Merci pour l'aide!

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
  pid_t pid = fork();
  pid = fork();
  pid = fork();
  if (pid == 0)
  {
    fork();
  }
  fork();
  return 0;
}
11
Ben Reed

Il est assez facile de raisonner à travers cela. L'appel fork crée un processus supplémentaire chaque fois qu'il est exécuté. L'appel renvoie 0 dans le nouveau processus (enfant) et l'ID de processus de l'enfant (pas zéro) dans le processus d'origine (parent).

pid_t pid = fork();  // fork #1
pid = fork();        // fork #2
pid = fork();        // fork #3
if (pid == 0)
{
  fork();            // fork #4
}
fork();              // fork #5
  1. La fourchette n ° 1 crée des processus supplémentaires. Vous avez maintenant deux processus.
  2. La fourchette n ° 2 est exécutée par deux processus, créant deux processus pour un total de quatre.
  3. La fourchette 3 est exécutée par quatre processus, créant ainsi quatre processus, pour un total de huit. La moitié de ceux-ci ont pid==0 et la moitié ont pid != 0
  4. La branche n ° 4 est exécutée par la moitié des processus créés par la branche n ° 3 (donc quatre d'entre eux). Cela crée quatre processus supplémentaires. Vous avez maintenant douze processus.
  5. La fourchette n ° 5 est exécutée par les douze processus restants, créant ainsi douze processus supplémentaires; vous avez maintenant vingt-quatre.
26
sfstewman

Calculer ainsi:

Commencez par 1 (Processus principal) et indiquez-le deux fois pour chaque fork si fork n'est pas à l'intérieur si (pid == 0), sinon ajoutez 1/2 du processus en cours au nombre actuel de processus.

Dans votre code: 1PGot # 1 fork () donc doublez le nombre actuel de processus. Maintenant nouveau numéro de processus 2P

Got # 2 fork () donc double le nombre actuel de processus. Maintenant nouveau numéro de processus 4P

Got # 3 fork () donc double le nombre actuel de processus. Maintenant nouveau numéro de processus 8P

Vous avez obtenu la fourche n ° 4 (), mais attendez que la condition soit correcte (8 + 4 = 12) P

Got # 5 fork () donc double le nombre actuel de processus. Maintenant, nouveau numéro de processus 24P

3
Roshan Mehta

Vous avez raison. Il est juste 24. Il vient d'être compilé et exécuté avec printf avant la déclaration de retour finale. Vous avez 24 lignes de sortie.

1
willus

Cette instruction a plus de 24 processus enfants . Chaque appel de fork () entraîne deux processus, l'enfant et le parent. Ainsi, le premier fork aboutit à deux processus. Le second fork () est atteint par ces deux processus, ce qui donne quatre processus. Le dernier fork () est atteint par ces quatre, ce qui permet huit processus supplémentaires. Tous les processus sauf un (le processus original) est un enfant d'au moins une des fourchettes.

0
Moeez Mehmood