デーモンについて知る
Date2026/02/17 Last Modified2026/02/17
常駐プログラムってなんだろう
自動で動くバッチ、フックによってレスポンスに自動応答するシステム、などなど……。
なんとなく常駐しているものって、「デーモン(Daemon)」ってことなのかな~というぼんやりした理解をしていた。
けれど、バックグラウンドで常時稼働させているアプリはただの「バックグラウンドプロセス」だと知り、きちんと調べてみようと思った。
デーモンとは
デーモンというのは「LinuxにおけるOS管理下で常駐稼働するプロセス」を指している。
Windowsの場合は別の名前があり「サービス」という名称であるため、混同しないように。
また、OS管理下で常駐稼働するプロセスというのがカギで、何でもかんでも常駐していればデーモンではない。
バックグラウンドでいつも動かすもの、例えばコードエディタなどはずっと立ち上がっているけど、ただのバックグラウンドアプリというのはなんとなく合点がいく。
一方で常駐するプロセスといえば、mysqldやhttpdなどが思いつく。
これらは疑いなくデーモンであり、systemctlによって操作をするもの……と思いきや、実は慣習でしかないのである。
EC2でインスタンスを初期で立ち上げたりすると、mysqldなどはコマンドラインでインストールを行うが、この中に「デーモンに追加して起動する」というコマンドが含まれていたのだ。
(このコマンドってそういう意味だったんだ。)
つまるところ、「mysqld=自動でデーモンに入る」ではなくて「mysqld=デーモンに入れるべきだから意図して登録する」ということ。
これがバックグラウンドアプリとの違いで、対象となるプロセスをデーモンに入れることを慣習としているかがポイントである。
では、例えばGithub Actionsの機能を代替する「Runner」はデーモンか否か?
答えはデーモンに登録すべき。なぜなら、OSの起動時にずっとリポジトリの状態を監視していてほしいから。
スタートアップじゃだめなんですか?
ふと疑問に思ったのが、「別にデーモンに登録しなくても、スタートアップみたいにプロセスが立ち上がるようにするのと変わらなくないか?」というもの。
OS管理下であるべき意味があるかがわからなかった。
しかしこれの答えは結構簡単で、「ユーザーのログインに依存してしまうから」である。
そもそも、スタートアップというのはユーザーごとに異なる(Windowsもそう)。
なので、常駐させたいプロセスをユーザー基準にしてしまうと、ログイン中はあたかも常駐しているように見えるが、ログアウト後はプロセスが落ちてしまう。
よってスタートアップというのは主にGUI向けであり、本来の常時稼働とは全然違うものである。
あと、デーモンはOSの管理下なのでプロセスの起動順が選べるが、スタートアップにすると起動順の制御ができないらしい。
なので依存関係のあるプロセスを管理することが難しく、どちらにせよデーモンに登録するものは慣習に従うのが一番いい。