我做了一点测试,看看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
答案 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