一个简单的错误

  今天发现了一个简单的错误,但查很久都找不到原因,记录下来。

  某程序需要定期接收输入,然后fork一个进程出来通过exec函数执行相应的系统命令。但该程序运行一段时间后,执行任何系统命令时都会报错,错误信息是“Can't load '*.so'”,不能加载的包括是在标准路径中系统的so库文件。

  查找问题过程比较曲折,由于错误发生时系统其他功能正常,所以主要怀疑的方向是环境变量出现了问题以及fork和exec环境变量传递等问题。毫无疑问,查阅了很多文档以及测试,都是毫无头绪的。

  最后,实际的原因是:进程打开了过多的文件未及时关闭,导致文件句柄不足。

  问题很简单,但报错信息未能正确提示问题所在,甚至未能提示到接近的原因,导致查找方向性错误。

猜你喜欢

转载自naso.iteye.com/blog/2322841