デーモンプロセスでシグナルをハンドリングする - 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.