シグナル ハンドラーの作成

シグナル ハンドラーは、きわめてコンパクトであることが条件です。シグナルは決まったタイミングで生成されるわけではありません。そのため、シグナル生成時にはグローバル変数を変更しているルーチンなど、不安定なルーチンが存在している可能性があります。そのようなルーチンをシグナル ハンドラー内で実行しようとすると問題が発生します。シグナル ハンドラー内で実行すべきでないルーチンには、C の標準ライブラリ ルーチン (malloc() など) も含まれます。

シグナル ハンドラーから安全に呼び出せる C ライブラリ ルーチンのサブセットもあります。このサブセット以外の C ライブラリ ルーチンや COBOL ルーチンはシグナル ハンドラー内で使用すべきではありません。安全に呼び出すことができるライブラリ ルーチンの詳細については、使用しているシステムのドキュメントを参照してください。

一部のシグナルは、重大なエラーの発生時にオペレーティング システムによって生成されます。これらのシグナルが検出されると、予期しない問題や重大な問題につながる可能性があるため、シグナル処理を試みるべきではありません。該当するシグナルは次のとおりです。

一部のシグナルは、ランタイム システムのデフォルト ハンドラーで処理しないと、ランタイム システムの機能を損なう可能性があります。これらのシグナルを処理する優先度 140 以上のシグナル ハンドラーでは、引き続きデフォルト ハンドラーが呼び出されるように、ゼロ以外の値を返す必要があります。該当するシグナルは次のとおりです。

注: 将来的には、デフォルトのシグナル ハンドラーに変更が加えられたり、シグナルが追加される可能性があります。

例については、「シグナル ハンドラーの通知例」を参照してください。