我做的很少,包括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是一个全局变量。
答案 0 :(得分:2)
当你分叉孩子时,孩子的地址空间中有另一个procReal副本,与父母的地址空间不同。该值应在父“before”fork和父“wait”等等中计算。