サーバープロセスの優雅なシャットダウン

このページでは、シグナルを使用して動作中のサーバープロセスを優雅にシャットダウンする方法を紹介します。

Server.Run(Handler) でサーバープロセスを開始すると、ブロックされて新しいシグナルを待機します。

実行中のプログラムに送信できるシグナルは2種類あり、それらを使用してプロセスを優雅にシャットダウンできます。

  • TSTP: このシグナルは Server に新しいタスクを処理しないように指示します。
  • TERM もしくは INT: このシグナルは Server を終了(つまり、シャットダウン)するように指示します。

新しいタスクの処理を停止するためには、まずTSTPシグナルを送信して、その後、プログラムを終了するためにTERMシグナルを送信することをお勧めします。

シグナルを送信するには、kill コマンドを使用します。

kill -TSTP  # 新しいタスクの処理を停止

kill -TERM  # サーバーをシャットダウン

注意: TSTP シグナルを送信せずに TERM もしくは INT シグナルを送信すると、Server はタイマーを開始し、全てのワーカーが完了するまで8秒待機します(このタイムアウトの期間をカスタマイズするには、ShutdownTime 構成を使用します)。その期間内に未完了のワーカーがある場合、タスクは 保留中 の状態に戻され、プログラム再起動時に再度処理されます。

注意: 現在、Windowsは TSTP シグナルをサポートしていません。