2009-07-02 22 views
2

times()関数を使用して値を測定していますが、私のアプローチが正しいかどうかわかりません。あなたはfork()への呼び出しの前にtimes(&tms_start)を呼び出す必要があります外観とアドバイスLinuxでのexec()プロセスの測定時間

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); 
     } 
    } 
} 

答えて

5

を持っていてください。上のコードでは、tms_start変数は、親がtimes(&tms_start)を呼び出すことはないため、親では初期化されません。

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

わかりました。だからこの違いの計算は正しいと思いますか? clock_t real = tms_end.tms_cstime - tms_start.tms_stime – user108127

+1

子プロセスに代わってカーネルが費やした時間を測定する場合は、式が正しい。ただし、プロセス自体が使用するCPU時間を測定する(可能性が高い)場合は、tms_cutimeおよびtms_utimeを使用します。実際の壁掛け時間を測定したい場合は、times()をまったく使用せず、代わりにtime()またはgettimeofday()を使用してください。 –

+0

とどこに行くのですか? – User

関連する問題