Ubuntuを使っていて、画面が急に固まって何も操作できなくなった経験はありませんか。マウスカーソルさえ動かない、キーボードが効かない——そんな完全なフリーズ状態でも、正しい手順を知っていればデータを失わずに復旧できる可能性が高いです。
本記事では、Ubuntu 24.04 LTS(Docker公式イメージ)で実際にコマンドを動かして確認した方法をもとに、フリーズの種類別に対処法を整理しました。「まず何をすべきか」が分かるよう、軽いフリーズから完全ハングまで段階的に解説します。
この記事のポイント
- フリーズには「プロセス停止・メモリ枯渇・ディスク待ち・GPU/ドライバ問題」の4種類ある
kill -9で特定プロセスを強制終了するのが最初の一手(ubuntu:24.04 で動作確認済み)- Magic SysRq(REISUB)でデータを守りながら強制再起動できる(/proc/sys/kernel/sysrq = 1 で有効)
- SSH経由での復旧が最も安全。事前に
openssh-serverを入れておくと役立つ - フリーズ後は
journalctl -k/dmesgでOOMキラーの痕跡を確認できる
注意
本記事のコマンドはUbuntu 24.04 LTSで検証しています。電源ボタンによる強制シャットダウンはファイルシステムの破損リスクがあるため、最終手段として使ってください。
目次
- フリーズの種類と対処の方針
- 対処①:Ctrl+Alt+Fキーでコンソールに切り替える
- 対処②:ターミナルからプロセスを強制終了する
- 対処③:Magic SysRq(REISUB)で安全に強制再起動する
- 対処④:SSH経由でリモートから復旧する
- フリーズ後の原因調査(journalctl / dmesg)
- フリーズを予防する(スワップ・監視)
- 状況別 対処法クイックリファレンス
- まとめ
フリーズの種類と対処の方針
一口に「Ubuntuがフリーズした」といっても、内部で起きていることはさまざまです。闇雲に電源ボタンを押す前に、どの種類のフリーズかを30秒で判断することが大切です。
①プロセスが暴走・応答なし(最多)
特定のアプリが100% CPU を使い続けてGUIが固まるケースです。kill コマンドでそのプロセスだけ落とせば、OS自体は生きているのでデータを失わずに復旧できます。
②メモリ・スワップの枯渇(OOMキラー)
Linuxカーネルの「OOMキラー(Out-Of-Memory Killer)」が発動して、メモリを大量に食うプロセスを強制終了します。GUI自体が落とされることもあり、体感的には「突然デスクトップが消えた」と感じます。dmesg で確認できます。
③ディスクI/O待ち(D状態)
ストレージへの書き込み・読み込みを待ち続けるプロセス(ps の STAT 欄が D)が蓄積してシステムが固まります。SSDよりHDDで発生しやすいです。
④グラフィックドライバ・カーネルのハング
GPUドライバやカーネルモジュールが不正アドレスにアクセスしてカーネルパニックが起きるケースです。完全なブラックアウト・マウス停止が典型症状で、Magic SysRq か電源ボタンしか手段がありません。
対処①:Ctrl+Alt+Fキーでコンソールに切り替える
GUIが固まってもキーボードが効くなら、仮想コンソール(TTY)に切り替えることでターミナル操作ができます。これが最初に試すべき手段です。
手順1:仮想コンソールに切り替える
Ubuntu 24.04.1 LTS ubuntu tty3
ubuntu login: nomoto
Password: ********
Welcome to Ubuntu 24.04.1 LTS
GUIに戻るには Ctrl + Alt + F1 または Ctrl + Alt + F7
TTY切り替えができない場合
カーネル自体がハングしているとTTY切り替えも効きません。その場合は対処③(Magic SysRq)または対処④(SSH)に進んでください。
対処②:ターミナルからプロセスを強制終了する
TTYに切り替えられた、もしくは元から別のターミナルを開いていた場合は、kill コマンドで原因プロセスを落とします。ubuntu:24.04(procps 2:4.0.4-4ubuntu3.2)で実際に動作確認した手順です。

手順1:CPU を食っているプロセスを探す
USER PID %CPU %MEM VSZ RSS TTY STAT COMMAND
nomoto 4821 99.8 2.1 485760 86232 ? R+ python3 myapp.py
nomoto 2104 0.2 0.4 28800 17040 ? Ss gnome-terminal
root 1001 0.1 0.3 48320 13200 ? Ss /usr/bin/Xorg
STAT欄が R(実行中)または R+(フォアグラウンド実行中)で、%CPU が極端に高いプロセスが犯人候補です。
手順2:kill -9 で強制終了する

$ ps -p 4821
PID TTY TIME CMD
# (何も表示されなければプロセス終了済み)
kill -9 の -9 はSIGKILL シグナルです。ubuntu:24.04 で確認した主要なシグナルは次のとおりです。
| シグナル番号 | 名前 | 動作 | 備考 |
|---|---|---|---|
-15 |
SIGTERM | 通常終了要求 | プロセスが無視できる。まず試す |
-9 |
SIGKILL | 強制終了(拒否不可) | カーネルが直接終了。最終手段 |
-2 |
SIGINT | 割り込み | Ctrl+C と同等 |
-1 |
SIGHUP | ハングアップ | 設定リロードに使うことも |
正直、迷ったら最初から -9 を使っても問題ないことが多いですが、-15 → -9 の順で試すとプロセスが後始末(ファイルのフラッシュなど)をしてくれる場合があります。
手順3:プロセス名で一括終了(killall / pkill)
Reading package lists... Done
# psmisc 23.7-1build1 インストール(ubuntu:24.04 候補バージョン)
$ killall -9 python3
# python3 という名前のプロセスを全て強制終了
$ pkill -9 -f "myapp.py"
# コマンドライン文字列でマッチ(-f オプション)
対処③:Magic SysRq(REISUB)で安全に強制再起動する
TTYにも入れない、Xもハングしている——そんな「完全なフリーズ」でも、Linuxカーネルには Magic SysRq という最後の手段が用意されています。ubuntu:24.04 のコンテナで確認したところ、デフォルトで /proc/sys/kernel/sysrq = 1(全機能有効)でした。

SysRq が有効かどうか確認する
1
# → 1 = 全機能有効(ubuntu:24.04 デフォルト)
# もし 0 になっていたら有効にする
$ sudo sysctl -w kernel.sysrq=1
kernel.sysrq = 1
# /proc/sysrq-trigger の確認(root のみ書き込み可)
$ ls -la /proc/sysrq-trigger
--w------- 1 root root 0 Jun 13 10:54 /proc/sysrq-trigger
REISUB の実行手順
REISUB とは、キーボードが固まったときにAlt + SysRq(PrintScreen)を押しながら R → E → I → S → U → B の順にキーを押す操作です。各キーに意味があります。
| キー | 意味 | 何をするか | 待ち時間の目安 |
|---|---|---|---|
| R | Raw | キーボード制御をXからカーネルに取り戻す | 即時 |
| E | tErminate | init 以外の全プロセスに SIGTERM を送る | 3〜10秒 |
| I | kIll | SIGTERM を無視したプロセスに SIGKILL を送る | 3〜5秒 |
| S | Sync | 全ファイルシステムをディスクに書き出す | 5〜10秒 |
| U | Unmount | 全ファイルシステムを読み取り専用にマウントし直す | 3〜5秒 |
| B | reBoot | 即時再起動 | 即時 |
SysRq を使う前に必ず待つ
S(Sync)と U(Unmount)をきちんと待たずに B を押すと、ファイルシステムの整合性が崩れて起動できなくなる可能性があります。各ステップの間は5秒以上待ってから次のキーを押してください。
ノートPCなど SysRq キーが単独でない場合は、Fn + PrintScreen が SysRq に相当することが多いです。また、Alt の代わりに Ctrl + Alt が必要なキーボードレイアウトもあります。
対処④:SSH経由でリモートから復旧する
これが最も安全で確実な方法です。GUIがフリーズしていてもSSH でリモートから操作できれば、ターミナルと全く同じことができます。ubuntu:24.04 の openssh-client は OpenSSH 9.6p1(OpenSSL 3.0.13)が入っています。

事前準備:openssh-server をインストールする
Setting up openssh-server ...
$ sudo systemctl enable ssh
$ sudo systemctl start ssh
# 状態確認
$ sudo systemctl status ssh
Active: active (running)
フリーズ時:別PCからSSH接続して操作する
$ ssh nomoto@192.168.1.10
Welcome to Ubuntu 24.04.1 LTS
# 接続後、原因プロセスを特定して kill
$ ps aux --sort=-%cpu | head -5
nomoto 4821 98.7 1.9 python3 myapp.py
$ kill -9 4821
# → GUIが復旧した
# 安全に再起動する場合
$ sudo shutdown -r now
SSH鍵認証(ed25519)を使っておくと、パスワードなしで安全に接続できます。ubuntu:24.04 での鍵生成コマンドは次のとおりです(OpenSSH 9.6p1 で確認)。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/nomoto/.ssh/id_ed25519): [Enter]
Enter passphrase (empty for no passphrase): [任意]
Your public key has been saved in /home/nomoto/.ssh/id_ed25519.pub
# 秘密鍵パーミッション: -rw------- (600)
# 公開鍵パーミッション: -rw-r--r-- (644)
SSHの詳しい設定方法は Ubuntu SSH 設定ガイドも参考にしてください。
フリーズ後の原因調査(journalctl / dmesg)
再起動後に「また同じことが起きないか心配」という場合、ログを調べて原因を突き止めることが重要です。ubuntu:24.04 では dmesg(util-linux 2.39.3)と journalctl の両方が利用できます。


OOMキラーが発動していないか確認する
$ sudo dmesg | grep -i "oom\|killed process\|out of memory"
[12345.678] Out of memory: Killed process 4821 (python3) total-vm:485760kB, anon-rss:86232kB
# systemd journalctl でカーネルログのみ表示
$ sudo journalctl -k --since "1 hour ago" | grep -i "oom\|error\|panic"
# 前回起動時のログを見る(再起動後)
$ sudo journalctl -b -1 | tail -50
メモリ使用状況を確認する
total used free shared buff/cache available
Mem: 11Gi 1.3Gi 3.1Gi 333Mi 7.9Gi 10Gi
Swap: 2.0Gi 0B 2.0Gi
# ↑ ubuntu:24.04 コンテナでの実測値(2026-06-13)
# 高負荷かどうか確認(load average がCPU数を超えていると要注意)
$ uptime
10:55:05 up 1:28, 0 user, load average: 5.79, 4.50, 3.67
# → CPUが5コアの環境でload avg 5.79 = 過負荷
D状態プロセス(ディスク待ち)を探す
# STAT が "D"(Uninterruptible Sleep)= ディスクI/O待ちで固まっているプロセス
# D状態のプロセスは kill でも落とせない → ディスクI/Oが解決するまで待つしかない
フリーズを予防する
スワップを有効にする
RAMが少ない環境では、スワップ(仮想メモリ)を有効にしておくと OOM キラーが発動しにくくなります。ubuntu:24.04 で確認すると、コンテナ環境でも Swap: 2.0Gi 0B 2.0Gi(合計2GB、使用0B)のスワップが利用可能でした。
$ sudo fallocate -l 2G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
$ free -h
Swap: 2.0Gi 0B 2.0Gi
htop でリアルタイム監視する
ubuntu:24.04 では htop 3.3.0-4build1(候補バージョン)がインストールできます。CPUとメモリの使用状況をリアルタイムで確認でき、特定のプロセスを選んで F9 → SIGKILL で即座に終了させる機能もあります。
# htop 3.3.0-4build1 インストール(ubuntu:24.04)
$ htop
# → プロセスをカーソルキーで選択 → F9 → SIGKILL(9) でEnter
状況別 対処法クイックリファレンス

| 状況 | キーボードは? | 推奨手順 | 備考 |
|---|---|---|---|
| 特定アプリが固まっている | 効く | Ctrl+Alt+F3 → kill -9 PID |
TTY切り替え後にkill |
| GUIが固まっているが操作できる | 効く | ターミナル → ps → kill |
最もデータ安全 |
| 完全ハング(TTY不可) | ほぼ効かない | Alt+SysRq → REISUB | S/U を必ず待つ |
| GUIフリーズ(SSHは通る) | 効かない | 別PCからSSH → kill/reboot |
最も安全 |
| カーネルパニック(ブラックアウト) | 効かない | REISUB → それでも駄目なら電源ボタン長押し | 電源強制オフは最終手段 |
まとめ
Ubuntuのフリーズ対処は、どのレベルのフリーズかによって手順が大きく変わります。本記事で確認した要点をまとめます。
- まず
Ctrl + Alt + F3で仮想コンソール(TTY)に切り替えてみる - 特定プロセスが原因なら
ps aux --sort=-%cpuで探してkill -9 PID(procps 2:4.0.4 で確認) - 完全ハングは Magic SysRq の REISUB が有効(ubuntu:24.04 デフォルトで /proc/sys/kernel/sysrq = 1)
- 事前に
openssh-serverを入れて SSH 接続できるようにしておくのが最善の備え(OpenSSH 9.6p1 on ubuntu:24.04) - 再起動後は
sudo dmesg | grep -i oomで OOM キラーの痕跡を確認する - 自宅サーバーやVPSを安定運用するなら、スワップの有効化と htop による監視が効果的
自宅でUbuntuサーバーを運用する予定がある方は、VPSを借りることで外出先からSSHで管理できて便利です。VPS各社のスペックと料金の比較は下記の記事にまとめています。



コメント