Linuxのサービスとプロセス管理を理解しよう

Linuxシステムを運用していると、「サービスが起動しない」「システムが重い」「ポートが開いているか確認したい」といった場面に必ず遭遇します。こうした問題を解決するには、サービスとプロセスの管理が欠かせません。

サービスとは、バックグラウンドで常時動作するプログラムのことで、Webサーバー(httpd)やSSHサーバー(sshd)などがその代表例です。一方、プロセスとは実行中のプログラム一つひとつを指します。サービスを管理できるようになれば、システムの起動・停止・再起動を自在にコントロールでき、プロセスを監視できれば、システムの負荷状況を把握してトラブルシューティングができるようになります。

この記事では、サービス管理の「systemctl」、プロセス監視の「ps」「top」「kill」、そしてファイアウォール管理の「firewalld」、通信確認の「ss」「netstat」といった基本コマンドを実例とともに学んでいきます。

目次

サービスとは?プロセスとは?

まず、「サービス」と「プロセス」の違いを理解しましょう。

プロセスとは、実行中のプログラムそのものです。たとえば、bashシェルを起動すればbashプロセスが、Webブラウザを開けばブラウザのプロセスが生まれます。プロセスには一意のプロセスID(PID)が割り当てられ、それぞれが独立して動作します。

「サービス(デーモン)」とは、システムのバックグラウンドで常時動作し、特定の機能を提供するプログラムです。たとえば:

  • sshd:SSH接続を受け付けるサービス
  • httpd(Apache):Webサーバーとして機能するサービス
  • crond:定期的なタスクを実行するサービス

サービスは通常、一つまたは複数のプロセスとして動作します。たとえばhttpdサービスを起動すると、親プロセスと複数の子プロセスが生成され、それぞれがWebリクエストを処理します。

イメージ図

[サービス: httpd]
    ├─ プロセス1(PID: 1234)← 親プロセス
    ├─ プロセス2(PID: 1235)← 子プロセス
    ├─ プロセス3(PID: 1236)← 子プロセス
    └─ プロセス4(PID: 1237)← 子プロセス

このように、サービスは「システム全体の機能」を表し、プロセスは「その実体」と捉えるとわかりやすいでしょう。

サービスを管理する systemctl コマンド

現代のLinuxディストリビューション(CentOS 7以降、Ubuntu 16.04以降など)では、Systemdというシステム管理デーモンが採用されています。Systemdは、サービスの起動・停止・自動起動設定などを統一的に管理する仕組みで、その操作にはsystemctlコマンドを使います。

主な systemctl コマンド

1. サービスの状態確認

sudo systemctl status firewalld

実行結果例:

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2025-10-27 10:00:00 JST; 2h ago
  • Loaded: サービスが読み込まれているか、自動起動が有効か(enabled/disabled)
  • Active: サービスが現在動作中か(active/inactive)

2. サービスの起動

sudo systemctl start httpd

このコマンドで、httpdサービスが即座に起動します。ただし、システム再起動後には自動起動しません。

3. サービスの停止

sudo systemctl stop httpd

稼働中のサービスを停止します。

4. サービスの再起動

sudo systemctl restart httpd

設定ファイルを変更した後などに、サービスを一度停止してから起動し直します。

5. サービスの自動起動を有効化

sudo systemctl enable httpd

システム起動時に自動的にhttpdが起動するよう設定します。ただし、このコマンドだけでは今すぐ起動しません。

6. サービスの自動起動を無効化

sudo systemctl disable httpd

システム起動時の自動起動を無効にします。

enable と start の違い

初心者が混乱しやすいのが、enablestartの違いです。

  • start:今すぐサービスを起動する(一時的)
  • enable:システム起動時に自動起動するよう設定する(永続的)

実務では、サービスを起動して自動起動も有効にしたい場合、以下のように両方実行します。

sudo systemctl start httpd
sudo systemctl enable httpd

あるいは、まとめて実行する方法もあります。

sudo systemctl enable --now httpd

プロセスを確認・監視する ps, top コマンド

サービスの裏側で動いているプロセスを確認・監視するには、pstopコマンドを使います。

ps コマンド | プロセス一覧の表示

ps(Process Status)は、現在動作中のプロセスを一覧表示するコマンドです。

ps aux

オプションの意味

  • a:全ユーザーのプロセスを表示
  • u:ユーザー名とCPU/メモリ使用率を表示
  • x:端末に紐づかないプロセスも表示

実行結果例(一部抜粋):

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 125676  3920 ?        Ss   10:00   0:01 /usr/lib/systemd/systemd
apache    1234  0.5  2.1 456789 21000 ?        S    10:15   0:10 /usr/sbin/httpd

特定のサービスのプロセスだけを確認したい場合は、grepと組み合わせます。

ps aux | grep httpd

これでhttpd関連のプロセスだけが表示されます。

top コマンド | リアルタイムでプロセスを監視

topコマンドは、システムの負荷状況とプロセスをリアルタイムで監視できます。

top

実行すると、以下のような画面が表示されます。

top - 12:30:15 up 2:30,  1 user,  load average: 0.15, 0.20, 0.18
Tasks: 150 total,   1 running, 149 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.2 us,  2.1 sy,  0.0 ni, 92.5 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3950.0 total,    450.2 free,   1200.5 used,   2299.3 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   2500.8 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 apache    20   0  456789  21000  12000 S   5.0   2.1   0:10.50 httpd
 5678 mysql     20   0 1234567 123456  45000 S   3.2  12.3   1:23.45 mysqld
topの見方
  • load average:システムの負荷(1分、5分、15分の平均)
  • %CPU:各プロセスのCPU使用率
  • %MEM:各プロセスのメモリ使用率
  • PID:プロセスID
topの基本操作
  • q:終了
  • k:プロセスを終了(PIDを入力)
  • M:メモリ使用率順にソート
  • P:CPU使用率順にソート

topは、「システムが重い」「どのプロセスがリソースを消費しているか知りたい」といった場面で非常に役立ちます。

プロセスを終了させる kill コマンド

プロセスが応答しなくなったり、不要なプロセスを終了したい場合にはkillコマンドを使います。

基本的な使い方

kill 1234

これは、PID 1234のプロセスにSIGTERM(終了シグナル)を送信します。SIGTERMは「正常に終了してください」という丁寧なお願いで、プロセスは後処理を実行してから終了します。

強制終了する場合

プロセスがSIGTERMに応答しない場合、SIGKILLで強制終了します。

kill -9 1234

-9はSIGKILLを意味し、プロセスを即座に強制終了します。ただし、後処理が実行されないため、データの不整合が起きる可能性があります。

SIGTERM と SIGKILL の違い

  • SIGTERM(kill):プロセスに終了を要請。プロセスは後処理を実行できる
  • SIGKILL(kill -9):プロセスを強制終了。後処理は実行されない

実務では、まずSIGTERMを試し、それでも終了しない場合にのみSIGKILLを使うのが鉄則です。

プロセス名から終了する例
# httpd のPIDを確認
ps aux | grep httpd
# 表示されたPIDに対してkill
kill 1234

あるいは、pkillコマンドを使えばプロセス名で直接終了できます

pkill httpd

firewalld の基本操作

Linuxサーバーをインターネットに公開する場合、ファイアウォールの設定は必須です。CentOS/RHEL系ではfirewalldが標準で使われています。

firewalld とは

firewalldは、パケットフィルタリングを行うファイアウォール管理ツールです。従来のiptablesをより簡単に扱えるようにしたもので、動的にルールを変更できるのが特徴です。

基本コマンド

1. firewalldの状態確認

sudo systemctl status firewalld

firewalldが動作しているか確認します。

2. ファイアウォールの状態を確認

sudo firewall-cmd --state

実行結果:

running

3. 現在の設定を一覧表示

sudo firewall-cmd --list-all

実行結果例:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no

現在許可されているサービスやポートが表示されます。

4. サービスを許可する

たとえば、Webサーバー(HTTP)への接続を許可するには:

sudo firewall-cmd --add-service=http --permanent

–permanentオプションを付けると、設定が永続化され、再起動後も有効になります。

5. 設定を反映する

sudo firewall-cmd --reload

–permanentで追加した設定は、reloadしないと反映されません。

–permanent と –reload の意味

  • –permanent:設定を永続化(再起動後も有効)
  • reload:永続化された設定を現在のセッションに反映

つまり、設定変更の流れは以下のようになります:

# 1. ルールを追加(永続化)
sudo firewall-cmd --add-service=http --permanent
# 2. 設定を反映
sudo firewall-cmd --reload
# 3. 確認
sudo firewall-cmd --list-all

実務では、Webサーバーを公開する際にHTTP(80番ポート)やHTTPS(443番ポート)を許可するのが一般的です。

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

通信状況を確認する ss・netstat コマンド

サーバーがどのポートで通信を待ち受けているか、どのプロセスがネットワークを使用しているかを確認するには、ssnetstatコマンドを使います。

ss コマンド:ソケット統計の表示

ss(Socket Statistics)は、netstatの後継コマンドで、より高速に動作します。

ss -tuln

オプションの意味:

  • -t:TCP接続を表示
  • -u:UDP接続を表示
  • -l:LISTEN状態(待ち受け中)のソケットを表示
  • -n:ホスト名やサービス名を数値で表示

実行結果例:

State    Recv-Q Send-Q Local Address:Port  Peer Address:Port
LISTEN   0      128    0.0.0.0:22          0.0.0.0:*
LISTEN   0      128    0.0.0.0:80          0.0.0.0:*
LISTEN   0      128       [::]:22             [::]:*

この例では、22番ポート(SSH)と80番ポート(HTTP)で接続を待ち受けていることがわかります。

プロセス情報も表示する

sudo ss -tulnp | grep httpd

-pオプションを追加すると、プロセス名とPIDも表示されます(root権限が必要)。

実行結果例:

LISTEN   0      128    0.0.0.0:80    0.0.0.0:*    users:(("httpd",pid=1234,fd=4))

これで、80番ポートを使用しているのがhttpd(PID 1234)だとわかります。

netstat コマンド

netstatは古くから使われているコマンドで、ssと同様の機能を持ちます。

netstat -tuln

ただし、ssの方が高速で情報も豊富なため、現在はssの使用が推奨されています。

ポート番号とサービスの関係

よく使われるポート番号を覚えておくと便利です:

  • 22番:SSH
  • 80番:HTTP(Web)
  • 443番:HTTPS(暗号化Web)
  • 3306番:MySQL
  • 5432番:PostgreSQL

イメージ図:

[クライアント] ──→ [サーバー:80番ポート] ← httpd(PID 1234)が待ち受け
                  [サーバー:22番ポート] ← sshd(PID 567)が待ち受け

このように、各サービスは特定のポート番号で通信を待ち受けており、ssコマンドでその状態を確認できます。

まとめ | サービスとプロセスを理解してLinuxを自在に操ろう

この記事では、Linuxのサービスとプロセス管理について学びました。ここで学んだ内容を整理しましょう。

systemctl → サービス管理

  • status:サービスの状態確認
  • start/stop/restart:サービスの起動・停止・再起動
  • enable/disable:自動起動の有効化・無効化

サービスの起動と自動起動設定を使い分けることで、システムを柔軟に管理できます。

ps, top, kill → プロセス管理

  • ps aux:実行中のプロセス一覧を表示
  • top:リアルタイムでプロセスとシステム負荷を監視
  • kill:プロセスを終了(SIGTERMとSIGKILLの使い分け)

プロセスを監視・制御することで、システムリソースを適切に管理し、トラブルシューティングができます。

firewalld, ss → 通信管理

  • firewall-cmd:ファイアウォールの設定(サービスやポートの許可)
  • ss -tuln:待ち受けポートとプロセスの確認

ネットワーク通信を管理することで、セキュアで正常に動作するサーバーを構築できます。

実務での応用例

たとえば、Webサーバーが応答しないトラブルが発生した場合、以下のように対処できます。

  1. サービスの状態確認sudo systemctl status httpd
  2. プロセスの確認ps aux | grep httpd
  3. ポートの確認sudo ss -tulnp | grep 80
  4. ファイアウォールの確認sudo firewall-cmd --list-all
  5. サービスの再起動sudo systemctl restart httpd

このように、各コマンドを組み合わせることで、問題の原因を特定し、適切に対処できるようになります。

💡次回予告

次のステップでは、Linuxのネットワーク設定について学びます。サーバーを運用する上で、ネットワークの理解は必須です。

次回で学ぶ内容:

  • IPアドレスの確認と設定ipコマンドとnmcliコマンドの使い方
  • ネットワークの疎通確認pingコマンドとcurlコマンドの実践
  • DNSとhostsファイル:名前解決の仕組みを理解する
  • IP固定設定:Rocky LinuxでIPアドレスを固定する方法

特に、サーバーのIP固定設定は実務で頻繁に行う作業です。DHCPで動的に割り当てられるIPアドレスを固定することで、サーバーへの安定したアクセスが可能になります。

また、pingcurlを使ったネットワークトラブルシューティングの方法も詳しく解説します。「サーバーに接続できない」といった問題を、段階的に切り分けて解決する手法を身につけましょう。

次回のテーマ:

  • 「Rocky LinuxでIPアドレスを固定する方法」
  • 「pingとcurlでネットワークを調べる」

ネットワーク設定をマスターすれば、サーバー構築の基礎は完成です。お楽しみに!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次