MQDではアプリケーションの実行時にシグナルの抑止とシグナルハンドラの登録を行っています。ここではMQDで行っているシグナル操作の内容について説明します。
MQDに接続する際に、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)します。
C言語で作成したMQDを使用するアプリケーションでは、MQDのアプリケーションインタフェースを呼び出してから復帰するまでの間、すべてのシグナルがブロックされるため、MQDのアプリケーションインタフェースを実行したスレッドでシグナルを受信することはできません。シグナルはアプリケーション内の別のスレッド(ユーザが作成したスレッドまたはMQDの制御スレッド)で受信されます。
なお、Interstage 4.1以前のバージョンでシグナルを使用する場合は、アプリケーションでMQDのアプリケーションインタフェース実行前後にブロック可能なシグナルのマスクとアンマスク処理を組み込んでください。
MQDから切断すると、表6.6 MQDに接続した際に設定されるシグナル動作に示すシグナルはすべてデフォルト動作(SIG_DFL)に変更されます。
MQDを使用するアプリケーションをSIGTERMで停止する場合は、以下の対処をアプリケーションで行ってください。
MQDに接続した後、SIGTERMに対応するシグナルハンドラを登録します。
SIGTERMを受け付けてシグナルハンドラが呼び出されます。
シグナルハンドラでは、必要に応じてアプリケーション資源の回収を行った後、mqdtermaplコマンドを自プロセス宛にsystem関数を使用することで実行します。
mqdtermaplコマンドにより、当該アプリケーションが停止されます。