为什么子运行时出现负面影响?

时间:2017-05-06 11:51:33

标签: c fork child-process

我做了一点测试,看看fork()与父进程相比,子进程执行需要多长时间。然而,运行这个程序,我得到了孩子的执行以某种方式出现负面。

#include <stdio.h>
#include <unistd.h>
#include <time.h>

int main(void){
    clock_t begin = clock();

    printf("Before fork\n");


    pid_t pid_return = fork();


    char* x;

    if(pid_return != 0){
        x = "Parent";
    }
    else{
        x = "Child";
    }

    clock_t end = clock();

    double time_spent = (double)(end - begin);
    printf("%s time spent: %f\n", x, time_spent);
}

输出:

Before fork
Parent time spent: 197.000000
Child time spent: -2143.000000

2 个答案:

答案 0 :(得分:3)

clock()不是(挂钟)运行时,它是当前进程使用的CPU量。通过使用fork(),您可能会在子进程中将此时间重置为0(因为它尚未使用任何CPU)。这就是为什么end在孩子身上要小得多,从中减去父亲的begin会使其变为负数。

答案 1 :(得分:3)

这是完全合法的,因为子进程中的时钟从不同的时间点开始:父进程clock在父进程生成时启动,而子进程clock在{{1}之后启动}}

您可以通过简单的测试来证明这一点:

fork

此程序在#include <stdio.h> #include <unistd.h> #include <time.h> #include <sys/types.h> int main(void){ printf("Before fork\n"); pid_t pid_return = fork(); clock_t time = clock(); char* x; if(pid_return != 0){ x = "Parent"; } else{ x = "Child"; } printf("%s time : %f\n", x, (double)time); } 中打印较小的数字,因为它的时钟在点击child之前未运行。在我的系统上,输出是

fork