【C/C++ execl异常】No such file or directory
平台支持自定义组件功能,允许用户上传可执行文件(bin/python/shell等等)。有用户反馈上传的python脚本组件输出不符合预期,遂进行定位。
定位问题异常点是 fork 后调用 execl 失败,系统报错 errno(2) ,错误信息为 No such file or directory ,但实际情况是拉起的文件无法执行。
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 来进行转换