シグナルチェーン

Java 2 SDK, Standard Edition, (JDK) v1.4 には、新しいシグナルチェーン機能が含まれています。シグナルチェーンを使用すると、Java Platform と、独自のシグナルハンドラをインストールするネイティブコードとの相互運用性が向上します。この機能は Solaris プラットフォームと Linux プラットフォームの両方で動作します。

シグナルチェーン機能は、以前のバージョンの Java HotSpot VM でのシグナル処理の問題を解決するために導入されました。バージョン 1.4 より前の Java HotSpot VM では、SIGBUSSIGSEGVSIGILL などのシグナルを処理するために、アプリケーションがインストールするシグナルハンドラは使用できませんでした。このようなシグナルハンドラは、Java HotSpot VM で内部的に使用するシグナルハンドラと競合する可能性があったからです。

シグナルチェーン機能は、次を提供します。

VM が最初に作成されるとき、VM で使用されるシグナルのために既存のシグナルハンドラを保存することで、事前インストールされたシグナルハンドラ (A) がサポートされます。その後、これらのシグナルが生成されたとき、その対象が Java HotSpot VM でない場合は、事前インストールされたハンドラが呼び出されます。つまり、これらのシグナルのために、事前インストールされたハンドラは VM ハンドラの背後で「チェーン」されます。

シグナルチェーン機能によって、アプリケーションは libc/libthread/libpthread の前に共有ライブラリ libjsig.so をリンクしてロードすることもできます。このライブラリは、Java HotSpot VM (B) によってすでにインストールされたハンドラと競合する場合に signal()sigset()sigaction() などの呼び出しを遮断して、Java HotSpot VM のシグナルハンドラの置き換えを防ぎます。代わりに、これらの呼び出しは、新しいシグナルハンドラを保存するか、または VM がインストールしたハンドラの背後にそれらを「チェーン」します。その後、これらのシグナルが生成されたとき、その対象が Java HotSpot VM でない場合は、事前インストールされたハンドラが呼び出されます。(B) が必要ない場合、libjsig.so は不要です。

libjsig.so を使用するには、次のように、HotSpot VM を作成する/埋め込むアプリケーションにこのライブラリをリンクするか、

cc -L <libjvm.so dir> -ljsig -ljvm java_application.c
または、次のように LD_PRELOAD 環境変数を使用します。
export LD_PRELOAD=<libjvm.so dir>/libjsig.so; java_application (ksh)

setenv LD_PRELOAD <libjvm.so dir>/libjsig.so; java_application (csh)
この間に呼び出される signal()/sigset()/sigaction() は、保存されたシグナルハンドラを返します。Java HotSpot VM によってインストールされた、OS で認識されているシグナルハンドラではありません。

シグナルチェーン機能は、機能拡張要求番号 4381843 に対応するために導入されました。


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.