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 の違い
初心者が混乱しやすいのが、enableとstartの違いです。
- start:今すぐサービスを起動する(一時的)
- enable:システム起動時に自動起動するよう設定する(永続的)
実務では、サービスを起動して自動起動も有効にしたい場合、以下のように両方実行します。
sudo systemctl start httpd
sudo systemctl enable httpdあるいは、まとめて実行する方法もあります。
sudo systemctl enable --now httpdプロセスを確認・監視する ps, top コマンド
サービスの裏側で動いているプロセスを確認・監視するには、psやtopコマンドを使います。
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 firewalldfirewalldが動作しているか確認します。
2. ファイアウォールの状態を確認
sudo firewall-cmd --state実行結果:
running3. 現在の設定を一覧表示
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 コマンド
サーバーがどのポートで通信を待ち受けているか、どのプロセスがネットワークを使用しているかを確認するには、ssやnetstatコマンドを使います。
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サーバーが応答しないトラブルが発生した場合、以下のように対処できます。
- サービスの状態確認:
sudo systemctl status httpd - プロセスの確認:
ps aux | grep httpd - ポートの確認:
sudo ss -tulnp | grep 80 - ファイアウォールの確認:
sudo firewall-cmd --list-all - サービスの再起動:
sudo systemctl restart httpd
このように、各コマンドを組み合わせることで、問題の原因を特定し、適切に対処できるようになります。
💡次回予告
次のステップでは、Linuxのネットワーク設定について学びます。サーバーを運用する上で、ネットワークの理解は必須です。
次回で学ぶ内容:
- IPアドレスの確認と設定:
ipコマンドとnmcliコマンドの使い方 - ネットワークの疎通確認:
pingコマンドとcurlコマンドの実践 - DNSとhostsファイル:名前解決の仕組みを理解する
- IP固定設定:Rocky LinuxでIPアドレスを固定する方法
特に、サーバーのIP固定設定は実務で頻繁に行う作業です。DHCPで動的に割り当てられるIPアドレスを固定することで、サーバーへの安定したアクセスが可能になります。
また、pingとcurlを使ったネットワークトラブルシューティングの方法も詳しく解説します。「サーバーに接続できない」といった問題を、段階的に切り分けて解決する手法を身につけましょう。
次回のテーマ:
- 「Rocky LinuxでIPアドレスを固定する方法」
- 「pingとcurlでネットワークを調べる」
ネットワーク設定をマスターすれば、サーバー構築の基礎は完成です。お楽しみに!

コメント