2012-04-05 7 views
0

Ich mache wenig assigment, die Gabel-, Vfork- und Klonfunktion beinhaltet. Ich muss Benutzer, System, Echtzeit des Elternteils und aller Kindprozesse messen. Mess Benutzer und Systemzeit ist einfach, in Echtzeit zu messen, ich Zeit von sys/times.h aufrufen, speichern den Wert und die Kind-Prozess ruftMesszeit des Prozesses und seiner Kinder

_exit(times(NULL)-procReal) 

und ich füge hinzu, diesen Wert zu einer anderen Variablen (siehe Code unten) .

Meine Frage ist, sollte der Wert, den ich speichere, kurz vor oder kurz nach der Gabel berechnet werden?

procReal=times(NULL);//here 
#ifdef FORK 
     pid=fork(); 
#elif VFORK 
     pid=vfork(); 
#endif 
procReal=times(NULL);//or maybe here 
    if (pid <0) 
     error_sys_f("fork failed"); 
    else if (pid ==0) 
    { 
     foo(); 
    } 
    else 
    { 
     wait(&statLoc); 
     if (WIFEXITED(statLoc)) 
      childrenReal+=WEXITSTATUS(statLoc); 
     else 
      error_sys_f("unnormal exit from children"); 
    } 

procReal ist eine globale Variable.

Antwort

2

Wenn Sie ein untergeordnetes Objekt forkieren, befindet sich im Adressbereich des untergeordneten Objekts eine weitere Kopie von procReal, nicht die gleiche wie im übergeordneten Objekt. Der Wert sollte in der übergeordneten "vor" Verzweigung und in der übergeordneten "nach" Wartezeit berechnet werden.

Verwandte Themen