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 のコードではありそうにないように思えますが、それはあなたのために行われます...)。

Update0

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 を押してプロセスを停止しました)。どのプラットフォーム/アーキテクチャで実行していますか?

(今後は、stdout/stderror をキャプチャできるようにsubprocessモジュールを使用することをお勧めします)

アップデート

誰かが投稿して消えたが、シグナル 24 はおそらくSIGXCPU (CPU 時間制限を超えた)である

于 2010-08-30T16:48:39.073 に答える