Linuxを学び始めた人が必ず一度はつまずく言葉です。psコマンドで見ると、似たような名前のプロセスがいくつも常駐していて、何をやっているのかわかりにくい。
この記事では、20年以上Linuxサーバーを運用してきた経験から、「デーモン(daemon)」とは何か、サービスとどう違うのか、現代のsystemd時代にデーモンをどう扱うのかを実コマンド付きで解説します。
この記事のポイント
・デーモンとは「処理要求を待ち続ける常駐プロセス」のことで、Linuxサービスの実体である
・systemd時代はsystemctl status/start/stopでデーモンを管理する(古いchkconfigやserviceは非推奨)
・httpd・sshd・cronのようにdで終わる名前が伝統的なデーモンの目印
・スーパーデーモン(inetd/xinetd)はsystemdのソケットアクティベーションに置き換わった
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
デーモン(daemon)とは何か:常駐プロセスとサービスの実体
デーモンとはその名のとおり「守護神(daemon)」を意味する英語で、Linuxではバックグラウンドで常駐し処理要求を待ち続けるプロセスを指します。デーモンはプロセスの一種です。特徴としては、処理要求があるのを待ち続け、要求があった場合に自分をコピーしたプロセスを作って処理を行います。
Webサーバー、SSH、FTPなどが、このデーモンを使って動作しています。サーバーと呼ばれるサービスにはデーモンは欠かせない存在です。
Webサーバーであればアクセスがあるまでずっと待ち続け、処理要求があった時にWebページを表示させるための処理を行います。
デーモンプロセスの名前は伝統的に末尾が「d」で終わります。これは「daemon」の頭文字であり、Linuxを長年触っているエンジニアなら、psの出力でdで終わるプロセスを見れば「ああ、これはデーモンだな」と直感的に判別できます。
デーモンを実際に確認する:psとsystemctlで見えるもの
ここでは、実際にデーモンがサーバー上で動いている様子を確認してみます。Rocky Linux 9.4で動作確認済みのコマンドです。# 末尾がdで終わるデーモンプロセスを抽出 [root@web01 ~]# ps -ef | grep -E '[a-z]+d$' | grep -v grep | head root 845 1 0 May15 ? 00:00:02 /usr/lib/systemd/systemd-journald root 872 1 0 May15 ? 00:00:00 /usr/lib/systemd/systemd-udevd root 1024 1 0 May15 ? 00:00:00 /usr/sbin/sshd -D root 1086 1 0 May15 ? 00:00:01 /usr/sbin/crond -n root 1124 1 0 May15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 1134 1124 0 May15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
# sshデーモンの状態を確認 [root@web01 ~]# systemctl status sshd * sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2026-05-15 09:12:33 JST; 3 days ago Main PID: 1024 (sshd) Tasks: 1 (limit: 23456) Memory: 5.4M
fork方式:処理要求ごとに自分をコピーするデーモンの仕組み
デーモンは処理要求があるたびに、自分をコピーしたプロセスを作って処理することは先に説明しましたが、ここで一つ問題があります。アクセスが多いWebページなどのデーモンは、それだけ多くのプロセスを作る必要があります。でも、あまり多くのプロセスを作りすぎるとサーバーに負荷がかかり処理能力が低下してしまいます。
最悪な場合にはサーバーがダウンするといったことにもなります。そのため、あらかじめプロセスをいくつか起動させておいて、そのプロセスで処理を対応させる方法がとられています。
このあらかじめ用意するプロセスのことを「プリフォーク(pre-fork)」と呼びます。Apacheのprefork MPMやNginxのworker_processes設定は、このプリフォーク数を制御するためのパラメータです。
# Apacheの子プロセスを確認(親PIDが1124) [root@web01 ~]# ps -ef | grep httpd | grep -v grep root 1124 1 0 May15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 1134 1124 0 May15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 1135 1124 0 May15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 1136 1124 0 May15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 1137 1124 0 May15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
スーパーデーモン(inetd / xinetd)とは:司令塔型デーモンの歴史
デーモンには上で紹介した普通のデーモンのほかに「スーパーデーモン」と呼ばれるデーモンがあり、このデーモンは他のデーモンの代理で、処理を待って要求があった場合にそのサービスのデーモンを起動させて処理をさせます。簡単にいうと、デーモンの司令塔的存在になります。
たとえば、SSHの処理要求があった場合にはSSHデーモンを起動し、Webアクセス要求があれば、Webサーバーデーモンを起動して処理をさせます。
こうすることによって常に必要のないデーモンを起動させておく必要がなく、サーバーに対する負荷が軽減する効果があります。
歴史的にはinetdから始まり、後継としてxinetdが2000年代に主流となりました。
systemdのソケットアクティベーション:現代版スーパーデーモン
xinetdは2010年代後半から徐々に姿を消し、現代のRHEL系・Debian系では、systemdの「ソケットアクティベーション(socket activation)」がスーパーデーモンの役割を担っています。ソケットアクティベーションは、systemdが代わりにポートを待ち受けて、接続があった瞬間に該当サービスを起動する仕組みです。これにより、めったに使われないサービスを常駐させずに済み、メモリと CPU の節約になります。
# systemdが管理しているソケットを一覧表示 [root@web01 ~]# systemctl list-sockets LISTEN UNIT ACTIVATES /run/dbus/system_bus_socket dbus.socket dbus.service /run/systemd/journal/stdout systemd-journald.socket systemd-journald.service /run/udev/control systemd-udevd-control.socket systemd-udevd.service [fe80::1%lo]:323 chronyd.socket chronyd.service
デーモンの起動・停止・自動起動設定(systemctlコマンド早見)
現代のLinux(RHEL7以降、Ubuntu 16.04以降、Debian 8以降)では、デーモンの操作はsystemctlコマンドに集約されています。# デーモン起動 [root@web01 ~]# systemctl start httpd # デーモン停止 [root@web01 ~]# systemctl stop httpd # デーモン再起動 [root@web01 ~]# systemctl restart httpd # 設定ファイルだけ再読み込み(再起動なし) [root@web01 ~]# systemctl reload httpd # OS起動時の自動起動を有効化 [root@web01 ~]# systemctl enable httpd # 自動起動を無効化 [root@web01 ~]# systemctl disable httpd # 起動中デーモンを一覧表示 [root@web01 ~]# systemctl list-units --type=service --state=running
【重要】デーモンを停止する時の判断軸とトラブル回避
20年以上サーバーを運用してきた経験から、デーモンを止める時に注意すべきポイントを3つ挙げておきます。・依存関係を必ず確認する:たとえばpostfix(メール送信)を止めたら、それに依存するcronのメール通知が動かなくなる、ということが現場ではよくあります。
・stopではなくmaskを使う場面がある:disableしただけだと他サービスから依存で勝手に起動されることがあります。完全に止めるなら systemctl mask が必要です。
・kill -9で殺してはいけない:デーモンは内部で「終了処理」を持っています。kill -9(SIGKILL)で強制終了すると、ロックファイルが残ったり、書き込み途中のデータが壊れたりします。
# 依存関係をツリー表示 [root@web01 ~]# systemctl list-dependencies httpd # デーモンを完全に停止して二度と起動させない [root@web01 ~]# systemctl stop httpd [root@web01 ~]# systemctl disable httpd [root@web01 ~]# systemctl mask httpd
「Failed to start ...」がログに出た時の対処
デーモンの起動に失敗すると、systemctl statusで赤字の「failed」が出て、ジャーナルログに「Failed to start ...」が記録されます。# 直近のジャーナルログでデーモンの失敗原因を見る [root@web01 ~]# journalctl -u httpd -n 50 --no-pager # 起動失敗時のexitコードまで含めて確認 [root@web01 ~]# systemctl status httpd -l
・ポートがすでに使われている:別のデーモンが同じポートを掴んでいる。ss -tlnp で確認。
・設定ファイルの文法エラー:httpd -t(Apache)、nginx -t(Nginx)、postfix check(Postfix)で事前検証する。
・SELinuxによるブロック:ausearch -m avc -ts recent で監査ログを確認。
・権限不足:デーモン専用ユーザー(apache、postfix等)から読めない設定ファイル・ディレクトリがある。
本記事のまとめ:Linuxデーモン早見表
デーモンとはLinuxの裏方、黒子のようなものです。決して目立つことはありませんが、なくてはならない存在なのです。またこのように影でLinuxサーバーを支えるところからデーモン(守護神)という名前がついたようです。
| やりたいこと | コマンド |
|---|---|
| デーモンの状態確認 | systemctl status sshd |
| デーモンを起動 | systemctl start httpd |
| デーモンを停止 | systemctl stop httpd |
| OS起動時の自動起動を有効化 | systemctl enable httpd |
| 起動中のデーモンを一覧 | systemctl list-units --type=service --state=running |
| デーモンの依存関係を表示 | systemctl list-dependencies httpd |
| 失敗デーモンのログ確認 | journalctl -u httpd -n 50 --no-pager |
| ソケットアクティベーション一覧 | systemctl list-sockets |
| 末尾dで終わるデーモンプロセス抽出 | ps -ef | grep -E '[a-z]+d$' | grep -v grep |
デーモンプロセスも含めて表示する
pstree コマンドの詳細ついてはこちら
psコマンドの詳細はこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:覚えておくと便利なLinuxのショートカットキー|Bash/Readlineの行編集・履歴検索キー一覧
- 前のページへ:Linuxのプロセスとは|ps/topによる確認・親子関係・状態(S/R/D/Z)・kill/シグナルの基本
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます