c - 测量进程及其子进程的时间

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

最佳答案

当您 fork 一个子进程时,子进程的地址空间中会有另一个 procReal 副本,与父进程中的副本不同。该值应该在父级“before”fork 和父级“after”wait 中计算。

关于c - 测量进程及其子进程的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036909/

相关文章:

c - 使用 Cmockery 验证函数指针是否相等

C编译器结构优化

c - 父进程在无限循环中杀死子进程

c - 对 execvp() 的调用内部重定向不起作用

c - fork一个进程,并使用管道将数据从文件逐行传输到子进程

c - 为什么这些变量明显改变了类型?

c - 将随机元素分配给结构字段

c - 交换结构

linux - 所有 fork 实例共享一个变量?

linux - fork() 如何为子进程返回