デーモンプロセスでシグナルをハンドリングする - lisp-cookbook-ja/common-lisp GitHub Wiki

Common Lispでデーモンプロセスを作成した場合で、特定の操作(データのリロード)が手動で必要となるような場合、シグナルを送信して指示することが便利です。

下記では、Unix系OSを想定し、処理系間の互換性のためCLiki:KMRCLを利用しています。

高度にインタラクティブな操作が必要な場合は、SWANK/SLIME等で接続した方が良いでしょう。

(kmrcl:set-signal-handler :usr1 
                          (lambda (&rest args)
                            (declare (ignore args))
                            (format t "~&* Reloading data...~%")
                            (force-output)
                            (reload-it)                           ;なんらかのリロード
                            (format t "~&...done.~%")
                            (force-output)))
;; プロセスIDを確認
(kl:getpid)
;=> 6269
# 他のシェル等から
$ kill -USR1 6269
;; 処理系が起動しているターミナル/ログ等
# Reloading data...
............
...done.