0

私はfork、vfork、clone関数を含む小さな割り当てを行っています。親プロセスとすべての子プロセスの両方のユーザー、システム、リアルタイムを測定する必要があります。ユーザーとシステムの時間の測定は簡単です。リアルタイムを測定するには、sys / times.hから時間を呼び出し、値と子プロセスの呼び出しを保存します。

_exit(times(NULL)-procReal)

そして、この値を他の変数に追加します(以下のコードを参照)。

私の質問は、私が保存する値は、フォークの直前またはフォークの直後に計算する必要があるかどうかです。

procReal=times(NULL);//here
#ifdef FORK
        pid=fork();
#elif VFORK
        pid=vfork();
#endif
 procReal=times(NULL);//or maybe here 
    if ( pid <0)
        error_sys_f("fork failed");
    else if (pid ==0)
    {
        foo();  
    }
    else
    {
        wait(&statLoc);
        if (WIFEXITED(statLoc))
            childrenReal+=WEXITSTATUS(statLoc);
        else
            error_sys_f("unnormal exit from children");
    }

procRealはグローバル変数です。

4

1 に答える 1

2

子をフォークすると、親のアドレス空間とは異なり、子のアドレス空間にprocRealの別のコピーがあります。値は、親の「前」のフォークと親の「後」の待機で計算する必要があります。

于 2012-04-05T22:46:34.833 に答える