2017-05-22 2 views
-2

Quelle serait la sortie? Je suis confus, c'est 2 ou 3 mais dont je ne suis pas sûr. Pouvez-vous aider?Est-ce que le processus enfant exécute les deux impressions?

main() 
{ 
    printf("hello\n"); 

    if(fork() == 0) 
     printf("hello\n"); 
} 
+0

Qu'avez-vous trouvé? Que se passe-t-il lorsque vous redirigez la sortie via 'cat' ou que vous la redirigez vers un fichier? –

+1

Pourquoi les gens vont-ils couper et coller le code dans une question SO, mais pas dans leur éditeur de choix et compiler la chose & * ^% $ pour obtenir une réponse solide! – John3136

+0

Alors que son souci est de savoir pourquoi le code se comporte ainsi, il est le bienvenu. – Xaqron

Répondre

2

déclaration if est va être évaluée après bifurquer de sorte que chaque processus irait avec sa propre valeur de retour qui est égal à zéro pour le processus de l'enfant et non nul (PID) pour le parent donc il y aurait 1 hello à ce stade .

Plus le premier hello en haut de votre code, vous obtenez un total de 2 hello s au terminal.