我正在使用fread阅读一个大文件。当我使用Ctrl + C在程序中断程序时,程序挂起并且不可用,也不能使用kill -9。它简单易用100%CPU,保留已经分配的RAM。修复它会很棒,但是能够从外部杀死该应用程序也是可以的(主要问题是我自己无法重启该机器)。 有没有办法在Unix中这样做?
谢谢!
以下是来源:
int Read_New_Format(const char* prefix,const char* folder)
{
char filename[500];
long count_pos;
//open files for reading.
sprintf(filename,"%s/%s.pos.mnc++",folder,prefix);
FILE *pos = fopen(filename,"r");
if(pos==NULL)
{
printf("Could not open pos file %s\n",filename);
}
//read the number count of entries in each of the three files.
fread(&count_pos,sizeof(long),1,pos);
printf("[...]");
//read the complete file into an array.
float *data_pos = new float[3*count_pos];
fread(data_pos,3*sizeof(float),*count_pos,pos);
printf("Read files.\n");
[...]
}
答案 0 :(得分:1)
如果您的程序不能被信号中断,那几乎肯定意味着它处于不间断的睡眠状态。这通常是一种非常短暂的状态,只有在等待物理磁盘执行读取或写入时才会暂时存在,这可能是由于明确的read
或write
调用无法通过缓存,或由于页面错误导致的缓存,其中磁盘支持的页面未交换到物理内存中。
如果不间断睡眠状态持续存在,这几乎肯定表明存储设备上的负载极高(一次发生大量IO请求),或者更可能是硬件损坏。
我怀疑您的硬盘出现故障或光盘已被刮伤。
答案 1 :(得分:0)
几天后问题无法重现。可能是文件系统的问题。作为一种解决方法,直接使用unix库例程而不是fread工作。