3

我在 Linux 上通过 Python 脚本运行 Java 程序,但程序崩溃而没有输出任何错误消息。执行Java程序的os.system命令输出错误码24,这是什么意思?

4

2 回答 2

6

在我的系统上可以找到/usr/include/asm-generic/errno-base.h

#define EMFILE      24  /* Too many open files */

这意味着您的进程已超出 C/系统文件描述符的限制。通常限制在 1024 左右,可能存在一些文件描述符未关闭的错误。(这在为您完成的 Python 或 Java 代码中似乎不太可能......)。

更新0

我刚刚意识到您可能在谈论 Java 程序的返回码。这是特定于程序的,您需要检查程序的文档或代码。

于 2010-08-30T16:19:08.063 回答
2

来自http://docs.python.org/library/os.html#os.system

在 Unix 上,返回值是以 wait() 指定的格式编码的进程的退出状态。注意,POSIX 没有指定 C 函数 system() 函数的返回值的含义,所以 Python 函数的返回值是系统相关的。

幸运的是,用于剖析返回状态的 C 宏在os模块中可用(从这里开始)

我在 amd64/Linux 上运行了这些:

>>> import os
>>> os.WIFEXITED(24) #Return True if the process exited using the exit(2) system call
False
>>> os.WIFSIGNALED(24) #Return True if the process exited due to a signal
True
>>> os.WTERMSIG(24) #Return the signal which caused the process to exit
24

根据http://linux.die.net/man/7/signal,我认为信号 24 可能是 SIGTSTP,(有人通过按 CTRL+Z 停止了进程)。你在什么平台/架构上运行?

(展望未来,我建议使用subprocess模块,以便您可以捕获 stdout/stderror)

更新

有人贴过了然后就消失了,但是信号24很可能是SIGXCPU(超出CPU时间限制)

于 2010-08-30T16:48:39.073 回答