测量过程及其子的时间

时间:2012-04-05 22:29:38

标签: c fork

我做的很少,包括fork,vfork和clone功能。我需要测量父进程和所有子进程的用户,系统,实时。测量用户和系统时间很简单,要测量实时,我从sys / times.h调用时间,存储值和子进程调用

_exit(times(NULL)-procReal)

我将此值添加到其他变量(请参阅下面的代码)。

我的问题是,我存储的值是在fork之前还是在fork之后计算的?

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是一个全局变量。

1 个答案:

答案 0 :(得分:2)

当你分叉孩子时,孩子的地址空间中有另一个procReal副本,与父母的地址空间不同。该值应在父“before”fork和父“wait”等等中计算。