0

我正在做一些涉及 fork、vfork 和克隆功能的分配。我需要测量父进程和所有子进程的用户、系统、实时。测量用户和系统时间很简单,要测量实时,我从 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 是一个全局变量。

4

1 回答 1

2

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

于 2012-04-05T22:46:34.833 回答