2016-11-11 1 views
0

子プロセスを作成し、CPUシステムとユーザー時間を印刷するのを待ちます。wait4()のRusageは、終了した子プロセスのCPU時間を表示しません。

int PrintChildProcessTime(char **arg) 
{ 
    pid_t pid; 
    int status; 
    struct rusage usage; 

    if ((pid=fork()) == 0) 
    { 
     execvp(arg[0],arg); 

     perror("Execvp error"); 
     _exit(1); 
    } 
    else if (pid > 0) 
    { 
     wait4(pid, &status, 0, &usage); 
     printf ("CPU time: %ld.%06ld sec user, %ld.%06ld sec system\n", usage.ru_utime.tv_sec, usage.ru_utime.tv_usec, usage.ru_stime.tv_sec, usage.ru_stime.tv_usec); 
    } 
    else 
    { 
     perror("Fork error"); 
     _exit(2); 
    } 
} 

事は、私が**argとしてsleep 10を渡し、親プロセスが終了する子供のために待機していても、それはまだシステムおよびユーザーCPU時間の両方で0.000000を示しています。

私は間違っていますか? ありがとうございます。

答えて

1

これは、ユーザー空間またはカーネル空間のいずれかに子プロセスが費やす時間があるためです。 sleepは単に呼び出しプロセスを中断し、CPU使用率はまったく低下しません。

代わりに、子プロセスに何らかの処理を行わせると、CPU時間が表示されます。例えば

、とmyscriptというスクリプトを持っている:

#!/bin/bash 

for((i=0;i<1000000;i++)); do 
    echo hi >/dev/null 
done 

と、いくつかのCPU使用率を表示します子プロセスへとそれを実行。

関連する問題