Sun Studio 12: Fortran ライブラリ・リファレンス

1.4.46 signal: シグナルに対する動作の変更

関数は、次のように呼び出します。

INTEGER*4 signal または INTEGER*8 signal

n = signal( signum, proc, flag )

signum

INTEGER*4

入力 

シグナル番号。signal(3) を参照

proc

ルーチン名 

入力 

ユーザーが作成したシグナル処理ルーチンの名前 (EXTERNAL 文で指定する必要がある) 

flag

INTEGER*4

入力 

flag < 0: proc をシグナル処理として使用する。

flag ≥ 0: proc を無視する。flag を動作の定義として渡す

flag = 0: デフォルトの動作を使用する。

flag = 1: このシグナルを無効にする。

戻り値 

INTEGER*4

出力 

n=-1: システムエラー

n>0: 変更前の動作の定義

n>1: n は呼び出されたルーチンのアドレス

n<-1: signum が正しいシグナル番号の場合: n は呼び出されたルーチンのアドレスsignum が正しいシグナル番号でない場合: n はエラー番号

 

INTEGER*8

 

64 ビット環境では、signal とその出力を受け取る変数は、INTEGER*8 と宣言する必要がある

proc が呼び出される場合、シグナル番号が整数の引数として渡されます。

プロセスがシグナルを受信した場合のデフォルトの動作は、通常はプロセスの終了処理と異常終了です。シグナル処理ルーチンは、特殊な処理を行うために特定の例外やインタラプトを得ることができます。

この関数の戻り値をあとで signal を呼び出す時に使用して、処理の定義を変更前に戻すことができます。

エラーがなくても負数の戻り値が返されることがあるので注意してください。有効なシグナル番号を signal() に渡して、戻り値が -1 未満であった場合は問題ありません。

floatingpoint.h では、SIGFPE_DEFAULTSIGFPE_IGNORE、および SIGFPE_ABORT という proc 値を定義しています。「1.4.26.1 floatingpoint.h: Fortran IEEE 定義」 を参照してください。

64 ビット環境では、signal は、その出力を受け取る変数とともに INTEGER*8 と宣言し、返される可能性のあるアドレスが切り捨てられるのを防ぐ必要があります。

参照: kill(1)、signal(3)、kill(3F)、『数値計算ガイド