シグナル・チェーン

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, 2020, Oracle and/or its affiliates. All rights reserved.