【C/C++ execl异常】No such file or directory

今天遇到一个因为windows文件上传Linux导致执行失败的问题,这里做一个记录

背景

平台支持自定义组件功能,允许用户上传可执行文件(bin/python/shell等等)。有用户反馈上传的python脚本组件输出不符合预期,遂进行定位。

系统报错:

定位问题异常点是fork后调用execl失败,系统报错errno(2),错误信息为No such file or directory,但实际情况是拉起的文件无法执行。

异常点:python文件存在且权限正常

1、通过su -命令切换至程序所属用户:用户侧权限可以查看到文件,使用python 文件名可正确执行
2、gdb跟踪程序:断点到程序执行到对应位置通过access函数定位程序具备文件的读/执行权限,但继续向后走调用execl会失败并返回errno(2),错误信息为No such file or directory

问题分析及原因定位

1、由上述分析可以看出,文件确实存在,但是因为其他原因导致执行时报错文件不存在
2、异常原因:用户侧windows下编辑文件,使文件带有windows换行符。Linux解析时发现最后带有特殊字符,致使文件第一行解析器解析失败,完整报错信息(/usr/bin/python^M: bad interpreter: No such file or directory

解决方案

通过dos2unix函数,可以将文件装换为Linux下的问题,转换后就可以正常执行了。

思考

Linux下的报错信息也不绝对,还是要根据时间情况进行分析
Windows下可以通过file命令来进行识别,dos2unix来进行转换

image.png

推荐阅读更多精彩内容