0

子プロセスを作成し、それが終了するのを待って、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);
    }
}

問題は、私がsleep 10asを渡し**arg、親プロセスが子プロセスの終了を待っていても、システムとユーザーの両方の CPU 時間で 0.000000 が表示されることです。

私は何を間違っていますか?ご協力ありがとうございました。

4

1 に答える 1

1

これは、子プロセスがユーザー空間またはカーネル空間で費やした時間があるためです。sleep呼び出しプロセスを一時停止するだけで、CPU 使用率はまったく発生しません。

代わりに、子プロセスに何かをさせると、CPU 時間が表示されます。

たとえば、次のようにスクリプトを呼び出すmyscriptとします。

 #!/bin/bash

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

CPU使用率を示す子プロセスとして実行します。

于 2016-11-11T17:13:33.580 に答える