我在 Linux 上通过 Python 脚本运行 Java 程序,但程序崩溃而没有输出任何错误消息。执行Java程序的os.system命令输出错误码24,这是什么意思?
2 回答
在我的系统上可以找到/usr/include/asm-generic/errno-base.h
:
#define EMFILE 24 /* Too many open files */
这意味着您的进程已超出 C/系统文件描述符的限制。通常限制在 1024 左右,可能存在一些文件描述符未关闭的错误。(这在为您完成的 Python 或 Java 代码中似乎不太可能......)。
更新0
我刚刚意识到您可能在谈论 Java 程序的返回码。这是特定于程序的,您需要检查程序的文档或代码。
来自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时间限制)