【问题标题】:Unable to find out what return code of -11 means无法找出 -11 的返回码是什么意思
【发布时间】:2014-07-31 02:54:52
【问题描述】:

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

系统:RHE 5.7, 蟒蛇: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

【问题讨论】:

    标签: python c linux


    【解决方案1】:

    返回码 -11 表示“分段错误”。负返回码通常意味着进程被信号终止。返回码 -11 表示它是信号 11,即 SIGSEGV。

    【讨论】:

    • 谢谢。这表明 C 程序正在运行、崩溃并且未能产生任何调试输出。实际上,如果我将 args 打印出来并始终退出,那么所有调用的输出都会出现。这只是 C 语言中的一次崩溃。我想我已经在 python 中工作了很长时间,以至于我已经成长为期望在每个异常情况下都有完整的堆栈跟踪。
    • 我有同样的问题,感谢您的回答。但是,这个负面退出代码在哪里解释?我试图在 Google 上搜索,但没有找到解释这一点的文档。
    • @yaobin Here A negative value -N indicates that the child was terminated by signal N (POSIX only).
    • @YvesgereY 感谢您的链接!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多