ページの先頭行へ戻る
Interstage Application Server MessageQueueDirector説明書

6.9.1 シグナルを使用するアプリケーションの注意事項

  MQDではアプリケーションの実行時にシグナルの抑止とシグナルハンドラの登録を行っています。ここではMQDで行っているシグナル操作の内容について説明します。

6.9.1.1 MQDに接続した際のシグナル操作

  MQDに接続する際に、MQDが動作を変更するシグナルとその動作を表6.6 MQDに接続した際に設定されるシグナル動作に示します。

表6.6 MQDに接続した際に設定されるシグナル動作

名称

シグナル動作(注1)(注2)

SIGHUP

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGINT

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGQUIT

MQD用シグナルハンドラの登録(注3)

SIGILL

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGBUS

MQD用シグナルハンドラの登録(注3)

SIGSEGV

MQD用シグナルハンドラの登録(注3)

SIGSYS

MQD用シグナルハンドラの登録(注3)

SIGPIPE

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGTERM

MQD用シグナルハンドラの登録(注3)

SIGUSR1

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGUSR2

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGPWR

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGWINCH

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGURG

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGTSTP

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGCONT

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGTTIN

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGTTOU

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGVTALRM

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGPROF

SIG_IGN: シグナルを無視する(アクションを実行しない)

SIGWAITING

SIG_IGN: シグナルを無視する(アクションを実行しない)

注1) MQDが設定したシグナル動作を変更する場合は、MQDに接続した後、シグナル動作を任意な処理に変更してください。ただし、シグナル動作をExit、CoreまたはStopに変更した場合、当該アプリケーションが使用しているMQDシステムが強制停止する可能性があります。シグナル動作を変更する場合は、シグナルハンドラの登録またはシグナルの無視のいずれかを設定してください。

注2) シグナルハンドラを登録する場合は、シグナルハンドラの処理中にスレッドまたはプロセスを終了しない様にアプリケーションを作成してください。シグナルハンドラでスレッドまたはプロセスを終了すると当該アプリケーションが使用しているMQDシステムが強制停止する可能性があります。

注3) MQD用のシグナルハンドラでは、アプリケーション内のすべてのスレッドでMQDのアプリケーションインタフェースの呼出が完了するのを待ち合わせた後、当該プロセスを終了(abort)します。

6.9.1.2 MQD関数実行中のシグナル操作

  C言語で作成したMQDを使用するアプリケーションでは、MQDのアプリケーションインタフェースを呼び出してから復帰するまでの間、すべてのシグナルがブロックされるため、MQDのアプリケーションインタフェースを実行したスレッドでシグナルを受信することはできません。シグナルはアプリケーション内の別のスレッド(ユーザが作成したスレッドまたはMQDの制御スレッド)で受信されます。

  なお、Interstage 4.1以前のバージョンでシグナルを使用する場合は、アプリケーションでMQDのアプリケーションインタフェース実行前後にブロック可能なシグナルのマスクとアンマスク処理を組み込んでください。

6.9.1.3 MQDから切断した際のシグナル操作

  MQDから切断すると、表6.6 MQDに接続した際に設定されるシグナル動作に示すシグナルはすべてデフォルト動作(SIG_DFL)に変更されます。

6.9.1.4 MQDを使用するアプリケーションをSIGTERMで停止する方法

  MQDを使用するアプリケーションをSIGTERMで停止する場合は、以下の対処をアプリケーションで行ってください。

  1. MQDに接続した後、SIGTERMに対応するシグナルハンドラを登録します。

  2. SIGTERMを受け付けてシグナルハンドラが呼び出されます。

  3. シグナルハンドラでは、必要に応じてアプリケーション資源の回収を行った後、mqdtermaplコマンドを自プロセス宛にsystem関数を使用することで実行します。

  4. mqdtermaplコマンドにより、当該アプリケーションが停止されます。