2017-05-29 2 views
1

Le titre dit tout. J'apprends les systèmes d'exploitation et je veux écrire un code en langage de programmation C que Parent devrait recevoir des informations sur l'achèvement du travail de petit-fils. Comment puis-je faire en utilisant fourchette et attendre?Le parent devrait recevoir des informations sur la fin du travail du petit-fils

Le code renvoie des informations au parent concernant la fin du travail de l'enfant. Je veux faire la même chose avec mon petit-fils.

C'est ce que je l'ai essayé jusqu'à présent:

int main(int argc, char * argv[]){ 
    pid_t child, rv; 
    int st;  
    child = fork(); 
    if(child == 0){ 
     sleep(5); 
     return 5; 
    }  
    printf("Child PID = %ld\n", (long)child); 
    rv = wait(&st);  
    printf("wait() = %ld\nst = %x\n", (long)rv, st); 
    printf("Child exit code = %d\n", WEXITSTATUS(st)); 
    return 0; 

} 
+0

Voulez-vous vraiment dire parent et * grand * enfant, et pas seulement parent et enfant? Et qu'avez-vous essayé jusqu'ici? Comment cela a-t-il fonctionné ou n'a pas fonctionné? S'il vous plaît prenez le temps de [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask) et apprendre comment créer un [Exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve). –

Répondre

2

Appelons nos processus comme suit:

t1 - Parent process 
t2 - Child process 
t3 - Grandchild process 

La façon de le faire serait le flux suivant:

  1. t1 crée un processus enfant t2
  2. t1 attend processus enfant t2 état de sortie

Maintenant, le processus parent t1 est bloqué et en attente du processus fils t2 pour terminer.

  1. Marque processus enfant t2 créer son propre processus d'enfant t3.
  2. t2 attend le processus enfant t3.

Maintenant, t3 exécute, termine et renvoie l'état de sortie au parent t2. t2 s'exécutera et retournera ce statut à son parent t1. De cette façon, vous avez propagé le statut de sortie de t3 jusqu'à t1.