2016-11-11 4 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); 
    } 
} 

건은 여전히 ​​시스템 및 사용자 CPU 시간 0.000000를 보여주고, 내가 **arg으로 sleep 10을 전달하고 아이가 끝날 때까지 부모 프로세스가 대기하는 경우에도입니다.

내가 뭘 잘못하고 있니? 도움 주셔서 감사합니다.

답변

1

사용자 공간 또는 커널 공간에서 하위 프로세스가 소비 한 시간이 있기 때문입니다. sleep은 호출 프로세스를 일시 중단하고 CPU 사용을 전혀 초래하지 않습니다.

대신 자식 프로세스가 어떤 작업을 수행하면 CPU 시간이 표시됩니다.

예를 들어

는 스크립트와 myscript 불렀다 :

#!/bin/bash 

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

을 일부 CPU 사용량을 보여줍니다 자식 사전 처리로 실행합니다.