2009-07-02 2 views
2

Ich verwende die times() -Funktion, um den Wert zu messen, aber ich bin mir nicht sicher, ob meine Vorgehensweise korrekt ist. Bitte haben Sie einen Blick und BeratungMesszeit von einem exec() - ed Prozess unter Linux

struct tms tms_start, tms_end; 
if (!(pid=fork())) 
{ 
    //some necessary operations here 
    times(&tms_start); 
    execl(...); 
} 
else if (pid) 
{ 
    //in parent 
    int status; 
    wait(&status); 
    times(&tms_end); 
    if (WIFEXITED(status)) 
    { 
     if(WEXITSTATUS(status)==0) 
     { 
      clock_t real = tms_end.tms_cstime - tms_start.tms_stime 
      float running_time = real/(double)sysconf(_SC_CLK_TK); 
     } 
    } 
} 

Antwort

5

Sie benötigen times(&tms_start) vor dem Aufruf von fork() zu nennen. In Ihrem obigen Code ist die Variable tms_start im Elternelement nicht initialisiert, da das übergeordnete Element nie times(&tms_start) aufruft.

struct tms tms_start, tms_end; 
times(&tms_start);    // <-- here 
if (!(pid=fork())) 
{ 
    //some necessary operations here 
    execl(...); 
} 
else if (pid) 
{ 
    ... 
+0

Ah ich sehe. Also diese Differenzberechnung ist richtig, denke ich? clock_t real = tms_end.tms_cstime - tms_start.tms_time – user108127

+1

Wenn Sie die Zeit messen wollen, die der Kernel im Auftrag des untergeordneten Prozesses benötigt, ist Ihr Ausdruck korrekt. Wenn Sie jedoch (wahrscheinlich) die vom Prozess selbst benötigte CPU-Zeit messen möchten, verwenden Sie tms_cutime und tms_utime. Oder, wenn Sie die tatsächliche Wanduhrzeit messen möchten, verwenden Sie nicht mal() und stattdessen Zeit() oder gettimeofday(). –

+0

und wo hört auf zu gehen? – User