Что означает код ошибки 24 в Linux? - PullRequest
2 голосов
/ 30 августа 2010

Я запускаю программу на Java через скрипт Python в Linux, но программа вылетает без вывода сообщений об ошибках. Команда os.system, которая выполняет программу Java, выводит код ошибки 24. Что это значит?

Ответы [ 2 ]

5 голосов
/ 30 августа 2010

В моей системе это находится в /usr/include/asm-generic/errno-base.h:

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

Это означает, что ваш процесс превысил ограничение на дескрипторы файлов C / system. Обычно ограничение составляет около 1024, может быть ошибка в том, что некоторые файловые дескрипторы не закрываются. (Это может показаться маловероятным в коде Python или Java, где это делается для вас ...).

Update0

Я только что понял, что вы можете говорить о коде возврата из программы Java. Это зависит от программы, вам необходимо проверить документацию или код для программы.

2 голосов
/ 30 августа 2010

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

В Unix возвращаемым значением является выход состояние процесса, закодированного в формат указан для wait (). Обратите внимание, что POSIX не определяет значение возвращаемое значение системы C () функция, поэтому возвращаемое значение Функция 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). На какой платформе / архитектуре вы работаете?

(В дальнейшем я бы порекомендовал использовать модуль подпроцесс , чтобы вы могли захватывать stdout / stderror)

обновление

Кто-то опубликовал его, а затем он исчез, но сигнал 24 вероятен SIGXCPU (превышено ограничение по времени ЦП)

...