我有一个简单的 C 程序来计时进程启动时间(由于这是一项正在进行的学校作业,我不想发布完整的代码)。我的主函数看起来像这样:
int main(void) {
int i;
for (i = 0; i < 5; i++) {
printf("%lf\n", sample_time());
}
exit(0);
}
sample_time()
是一个函数,它会计时生成一个新进程所需的时间,并将结果以秒为单位作为 double
返回。其中生成新进程的部分如下所示:
double sample_time() {
// timing stuff
if (!fork()) exit(0); // immediately close new process
// timing stuff
return a_sample_time;
}
正如预期的那样,在终端运行程序times
将输出5个数字,如下所示:
$ ./times
0.000085
0.000075
0.000079
0.000071
0.000078
然而,在Unix终端中尝试将其重定向到文件(或任何其他地方)会产生意外的结果。
例如,./times > times.out
会创建一个包含15个数字的文件。此外,./times | wc -l
输出15
,确认了之前的结果。运行./times | cat
,我再次看到了15个数字,其中有五个以上是不同的。
有人知道造成这种情况的原因吗? 我已经没有主意了。
./times
!= ./times | cat
。咦。