デーモンとは|Linuxサービスを支える常駐プロセスとsystemd時代の管理術

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > デーモンとは|Linuxサービスを支える常駐プロセスとsystemd時代の管理術
「デーモンって何ですか?プロセスとは違うんですか?」
Linuxを学び始めた人が必ず一度はつまずく言葉です。psコマンドで見ると、似たような名前のプロセスがいくつも常駐していて、何をやっているのかわかりにくい。

この記事では、20年以上Linuxサーバーを運用してきた経験から、「デーモン(daemon)」とは何か、サービスとどう違うのか、現代のsystemd時代にデーモンをどう扱うのかを実コマンド付きで解説します。

この記事のポイント

・デーモンとは「処理要求を待ち続ける常駐プロセス」のことで、Linuxサービスの実体である
・systemd時代はsystemctl status/start/stopでデーモンを管理する(古いchkconfigやserviceは非推奨)
・httpd・sshd・cronのようにdで終わる名前が伝統的なデーモンの目印
・スーパーデーモン(inetd/xinetd)はsystemdのソケットアクティベーションに置き換わった


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

デーモン(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

systemd系の現代Linuxではこれらのデーモンの起動・停止・状態確認は、systemctlコマンドに統一されています。

# 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

Active: active (running) の表示が出ていれば、デーモンが正常に動作しています。

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

親プロセス(PID 1124)が「親デーモン」、子プロセス(apache所有の4プロセス)がリクエストを処理する「ワーカー」です。

スーパーデーモン(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

たとえば古くからあるrsyncを「めったに使わないが、たまに必要」というケースで、rsync.socketを有効化しておけば、接続があった時だけrsync.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

古いRHEL6時代の chkconfig や service コマンドは、systemd環境では互換ラッパーで残ってはいますが、新しい現場では使わないのが鉄則です。

【重要】デーモンを停止する時の判断軸とトラブル回避

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

maskを解除する時は systemctl unmask 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コマンドの詳細はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。