我有一个简单的C程序来处理启动时间(我不想发布完整的代码,因为它是一个活跃的学校作业).我的主要功能如下:
int main(void) {
int i;
for (i = 0; i < 5; i++) {
printf("%lf\n", sample_time());
}
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
sample_time()是一个函数,它计算分叉新进程所需的时间,并以秒为单位返回结果double.sample_time()分叉的一部分:
double sample_time() {
// timing stuff
if (!fork()) exit(0); // immediately close new process
// timing stuff
return a_sample_time;
}
Run Code Online (Sandbox Code Playgroud)
正如所料,运行程序,times在终端输出5个数字,如下所示:
$ ./times
0.000085
0.000075
0.000079
0.000071
0.000078
Run Code Online (Sandbox Code Playgroud)
但是,尝试将其传输到Unix终端中的文件(或其他任何位置)会产生意外结果.
例如,./times > times.out创建一个包含十五个数字的文件.此外,./times | wc -l输出15,确认早期的结果.跑步./times | cat,我再次看到十五个数字,其中五个以上是不同的.
有谁知道究竟是什么导致这样的事情?我没有想法.
./times!= ./times | cat …