我正在使用以下代码将模拟输出写入文件
sprintf(filename, "time_data.dat");
FILE *fp = fopen(filename,"w");
for(i=0;i<ntime;i++){
compute_data();
fprintf(fp, "%d %lf %lf \n", step, time_val ,rho_rms);
}
return;
在我的桌面上,我每隔几个小时就会看到文件time_data.dat更新(compute_data()每个时间步数需要几百秒,在i7机器上使用OpenMP)。我现在已将作业提交到群集节点(运行ubuntu服务器的E5 2650处理器)。我现在已经等了5天了,文件中还没有出现换行符。我做了
tail -f time_data.dat
检查输出。模拟将需要几周时间才能完成。我不能等那么久才能看出我的输出是否良好。有没有办法可以探测节点中的操作系统来刷新缓冲区而不会干扰计算?如果我现在取消工作,我相信不会有任何输出。 请注意,正在写入输出文件的硬盘是使用多个节点上的NFS和主节点共享的硬盘。这会造成什么麻烦吗?输出实际上是否有临时文件位?
PS:我做了du -h找到显示大小为0的文件。我也试过ls -l proc / $ ID / fd来确认文件是否打开。
答案 0 :(得分:1)
您可以使用lsof
或仅ls -l /proc/$(pidof yoursimulation)/fd
来检查(在群集节点上)确实已打开time_data.dat
。
对于这些长期运行的程序,我认为值得考虑使用: