无法找出-11的返回码是什么意思

Pat*_*atB 8 c python linux

我正在编写一个用python和C编写的工具.python脚本读取配置文件,执行一些验证,对C程序进行多次调用.

system: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
Run Code Online (Sandbox Code Playgroud)

进入C:

printf( "\n--- swizzle\n\nargs:\n" );
for ( int i = 0; i < argc; i++ ) printf( "- %s\n", argv[ i ]);
Run Code Online (Sandbox Code Playgroud)

错误输出:

Command '[..]' returned non-zero exit status -11
Run Code Online (Sandbox Code Playgroud)

sth*_*sth 14

返回码-11表示"分段错误".负返回码通常意味着该过程由信号终止.返回码-11表示它是信号11,即SIGSEGV.

  • @yaobin [此处](https://docs.python.org/3/library/subprocess.html#subprocess.Popen.returncode)`-负值-N表示该子对象已被信号N终止(仅适用于POSIX)。 ` (2认同)