サーバープロセスの優雅なシャットダウン
このページでは、シグナルを使用して動作中のサーバープロセスを優雅にシャットダウンする方法を紹介します。
Server.Run(Handler)
でサーバープロセスを開始すると、ブロックされて新しいシグナルを待機します。
実行中のプログラムに送信できるシグナルは2種類あり、それらを使用してプロセスを優雅にシャットダウンできます。
-
TSTP: このシグナルは
Server
に新しいタスクを処理しないように指示します。 -
TERM もしくは INT: このシグナルは
Server
を終了(つまり、シャットダウン)するように指示します。
新しいタスクの処理を停止するためには、まずTSTPシグナルを送信して、その後、プログラムを終了するためにTERMシグナルを送信することをお勧めします。
シグナルを送信するには、kill
コマンドを使用します。
kill -TSTP # 新しいタスクの処理を停止
kill -TERM # サーバーをシャットダウン
注意: TSTP シグナルを送信せずに TERM もしくは INT シグナルを送信すると、Server
はタイマーを開始し、全てのワーカーが完了するまで8秒待機します(このタイムアウトの期間をカスタマイズするには、ShutdownTime
構成を使用します)。その期間内に未完了のワーカーがある場合、タスクは 保留中 の状態に戻され、プログラム再起動時に再度処理されます。
注意: 現在、Windowsは TSTP シグナルをサポートしていません。