我正在编写一个用python和C编写的工具.python脚本读取配置文件,执行一些验证,调用C程序。
系统:RHE 5.7, python:2.7.6, gcc:4.5.2
被调用C程序的一些参数是输入文件的路径。有一种情况是输入文件路径对于多个C程序调用是相同的。在这种情况下,只有第一次调用成功,而python子进程模块的返回码是' -11'。
我不确定如何进步。首先,我找不到表明' -11'可能意味着退出状态。它似乎不属于“标准”标准。 /usr/include/sysexits.h中的代码。我猜测代码也可以解释为0xf5或245,因为退出代码我相信真正签名的8位值。
我已经在C程序的开头添加了调试来打印出调用它的参数,但是失败的调用没有出现任何内容。我可以理解C可能无法重新打开在前一次调用(也许)上读取的文件,但代码甚至没有那么远!
那么,退出代码来自哪里?它来自python子进程模块可能用来调用C程序的(bash)环境吗?它是否来自C程序的C运行时甚至到达main?
我想我可以通过移动'循环来实现这一目标。进入C,这样它只能为每个输入文件路径调用一次,但仍然无法解释这种行为。有人可以解释我如何确定此错误的原因?感谢。
(FWIW)从python调用:
try:
subprocess.check_call( args )
except subprocess.CalledProcessError as e:
print e
进入C:
printf( "\n--- swizzle\n\nargs:\n" );
for ( int i = 0; i < argc; i++ ) printf( "- %s\n", argv[ i ]);
错误输出:
Command '[..]' returned non-zero exit status -11
答案 0 :(得分:14)
返回代码-11表示“分段错误”。负返回码通常意味着该过程由信号终止。返回码-11表示它是信号11,即SIGSEGV。