9.1.3 Linuxの場合
Linuxの場合の注意事項について説明します。
-
forkシステムコールについて
JNIやJVMTIで呼び出されるネイティブメソッド,またはネイティブコードで,fork()システムコール発行だけで現行プロセスのコピーの子プロセスを生成,または実行した場合,その親子プロセスの動作は保証できません。fork()システムコール発行による子プロセス生成後は,必ずexec()システムコールで新規プログラムをローディングしてから起動してください。また,Java環境下で子プロセスを生成する場合には,Javaクラスライブラリのjava.lang.Runtime.exec()メソッドを使用することをお勧めします。
-
シグナルについて
JNIやJVMTIで呼び出されるネイティブメソッド,またはネイティブコードで,次のシグナルに対してシグナルハンドラを登録した場合,動作は保証しません。
SIGHUP,SIGINT,SIGQUIT,SIGILL,SIGFPE,SIGBUS,SIGSEGV,SIGPIPE,SIGTERM,SIGUSR2,SIGCHLD,SIGXCPU,SIGXFSZ,(_SIGRTMAX-2)番のシグナル
-
システムライブラリ関数やシステムコール呼び出し中のシグナル受信について
システムライブラリ関数やシステムコール呼び出し中に,次のシグナルを受信することがあります。
SIGHUP,SIGINT,SIGQUIT,SIGILL,SIGFPE,SIGBUS,SIGSEGV,SIGPIPE,SIGTERM,SIGUSR2,SIGCHLD,SIGXCPU,SIGXFSZ,(_SIGRTMAX-2)番のシグナル
システムライブラリ関数やシステムコールを呼び出す場合,該当する関数の処理が,これらのシグナル受信によって中断されて,エラーリターン(errno値にEINTRが設定されるなど)することがあります。この場合は,適切な処置(例えば,再実行など)を実施してください。
-
JNIプログラム中で使用できないライブラリについて
JavaVM内で管理している情報が更新されて不正な情報となる場合があるため,JNIプログラム中で次のライブラリは使用できません。
-
setjmp()
-
longjmp()
-
_setjmp()
-
_longjmp()
-
sigsetjmp()
-
siglongjmp()
-
-
Windowsとの文字データの受け渡しについて
Windowsとの文字データの受け渡しをする場合には,エンコーディングにMS932,windows-31j,cswindows31jのどれかを指定してください。
Shift_JISやSJISを指定すると,次の文字が不正な文字コードに変換されます。
-
生成できるスレッド数の上限値について
システム全体で生成できるスレッド数の上限は,/proc/sys/kernel/threads-maxです。また,1ユーザ当たりの生成できるスレッド数の上限は,/etc/security/limits.confのnprocの値(ulimit -uと同じ)となります。システムに応じて,これらの値を調整してください。
-
通知待ちのモニタ数について
JVMTIインタフェースを使用して取得した,通知待ちのモニタ情報が不正となる場合があります。
-
半角カタカナについて
JIS X 201で制定されている文字のうち,半角カタカナはJavaSEのAPIを使用したGUIの実装では利用できません。
-
java.security.SecureRandomクラスについて
/dev/randomファイルがあるプラットフォームでは,SecureRandomクラスの一部のAPIで/dev/randomファイルからOSが生成した乱数を取得します。/dev/randomファイルから乱数を取得するのは,次の条件がすべて重なる場合です。
-
java.security.egdプロパティまたはjava.securityファイル中のsecurerandom.sourceにfile:/dev/random/を指定する
-
SecureRandomクラスのgenerateSeed()メソッドまたはgetSeed()メソッドを呼び出す
OSの乱数生成速度には限度があります。このため,短い間隔で乱数の取得処理を実行すると,OSによる乱数生成完了まで処理が完了しないので注意してください。
-
-
java.io.tmpdirプロパティについて
java.io.tmpdirプロパティには,書き込み権限があり,かつ存在するディレクトリを指定してください。java.io.tmpdirプロパティの初期値は/tmpです。
また,Java RMIの動的クラスローディング機能やJava APIのjava.io.File.createTempFile()では,java.io.tmpdirプロパティで指定されたディレクトリに一時ファイルを作成します。これらの機能を正常に動作させるため,JavaVMプロセス起動中は一時ファイルの作成先を削除しないでください。
-
デフォルトエンコーディングについて
アプリケーションサーバのデフォルトエンコーディングを次に示します。
LANGがCまたはPOSIXのとき:US-ASCII(別名ASCII)
LANGがjp_JP,jp_JP.eucJP,ja_JP.ujis,japanese,japanese.eucのどれかのとき:x-euc-jp-linux(別名EUC_JP_LINUX)
LANGがja_JP.utf8のとき:UTF-8(別名UTF8)