【发布时间】:2014-02-16 01:22:18
【问题描述】:
我有一个简单的 C 程序来计时处理启动(我宁愿不发布完整的代码,因为它是一个活跃的学校作业)。我的主要功能如下所示:
int main(void) {
int i;
for (i = 0; i < 5; i++) {
printf("%lf\n", sample_time());
}
exit(0);
}
sample_time() 是一个函数,它计算分叉一个新进程所需的时间,并将结果以秒为单位返回为double。 sample_time()分叉的部分:
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,我再次看到十五个数字,其中有五个以上是不同的。
有谁知道到底是什么导致了这样的事情?我没有想法。
./times != ./times | cat。笏。
【问题讨论】: