Ubuntuがフリーズした時の強制終了・復旧方法

トラブル解決

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で検証しています。電源ボタンによる強制シャットダウンはファイルシステムの破損リスクがあるため、最終手段として使ってください。

目次

  1. フリーズの種類と対処の方針
  2. 対処①:Ctrl+Alt+Fキーでコンソールに切り替える
  3. 対処②:ターミナルからプロセスを強制終了する
  4. 対処③:Magic SysRq(REISUB)で安全に強制再起動する
  5. 対処④:SSH経由でリモートから復旧する
  6. フリーズ後の原因調査(journalctl / dmesg)
  7. フリーズを予防する(スワップ・監視)
  8. 状況別 対処法クイックリファレンス
  9. まとめ

フリーズの種類と対処の方針

一口に「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@linuxlab: ~
Ctrl + Alt + F3 ← TTY3 に切り替え(F2〜F6 どれでも可)
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)で実際に動作確認した手順です。

kill / pkill コマンドでプロセスを強制終了するターミナル操作(Playwright 実撮影)
kill / pkill コマンドでプロセスを強制終了するターミナル操作(Playwright 実撮影)

手順1:CPU を食っているプロセスを探す




ubuntu@linuxlab: ~
$ ps aux --sort=-%cpu | head -10
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 で強制終了する

kill -9 コマンドのデモ(ubuntu:24.04 実測)
kill -9 コマンドのデモ(ubuntu:24.04 実測)



ubuntu@linuxlab: ~
$ kill -9 4821
 
$ ps -p 4821
PID TTY TIME CMD
# (何も表示されなければプロセス終了済み)

kill -9-9SIGKILL シグナルです。ubuntu:24.04 で確認した主要なシグナルは次のとおりです。

シグナル番号 名前 動作 備考
-15 SIGTERM 通常終了要求 プロセスが無視できる。まず試す
-9 SIGKILL 強制終了(拒否不可) カーネルが直接終了。最終手段
-2 SIGINT 割り込み Ctrl+C と同等
-1 SIGHUP ハングアップ 設定リロードに使うことも

正直、迷ったら最初から -9 を使っても問題ないことが多いですが、-15 → -9 の順で試すとプロセスが後始末(ファイルのフラッシュなど)をしてくれる場合があります。

手順3:プロセス名で一括終了(killall / pkill)




ubuntu@linuxlab: ~
$ sudo apt install psmisc -y
Reading package lists... Done
# psmisc 23.7-1build1 インストール(ubuntu:24.04 候補バージョン)
 
$ killall -9 python3
# python3 という名前のプロセスを全て強制終了
 
$ pkill -9 -f "myapp.py"
# コマンドライン文字列でマッチ(-f オプション)
著者アイコン
著者アイコン

kill は PID 指定、killall はプロセス名で一括、pkill は正規表現で柔軟に探して終了できます。「何のプロセスが固まっているかわかる」なら kill -9 PID、「同じアプリが複数起動して全部落としたい」なら killall が便利です。

対処③:Magic SysRq(REISUB)で安全に強制再起動する

TTYにも入れない、Xもハングしている——そんな「完全なフリーズ」でも、Linuxカーネルには Magic SysRq という最後の手段が用意されています。ubuntu:24.04 のコンテナで確認したところ、デフォルトで /proc/sys/kernel/sysrq = 1(全機能有効)でした。

/proc/sys/kernel/sysrq の実測値と有効化手順(ubuntu:24.04)
/proc/sys/kernel/sysrq の実測値と有効化手順(ubuntu:24.04)

SysRq が有効かどうか確認する




ubuntu@linuxlab: ~
$ cat /proc/sys/kernel/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)が入っています。

SSH経由でフリーズしたUbuntuに接続してプロセスを強制終了する操作(Playwright 実撮影)
SSH経由でフリーズしたUbuntuに接続してプロセスを強制終了する操作(Playwright 実撮影)

事前準備:openssh-server をインストールする




ubuntu@linuxlab: ~ [フリーズ前に設定しておく]
$ sudo apt install openssh-server -y
Setting up openssh-server ...
 
$ sudo systemctl enable ssh
$ sudo systemctl start ssh
 
# 状態確認
$ sudo systemctl status ssh
Active: active (running)

フリーズ時:別PCからSSH接続して操作する




別PC(Mac/Windows/Linux)から接続
# フリーズしたUbuntuのIPアドレスを確認しておく(事前に)
$ 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 で確認)。




ubuntu@linuxlab: ~
$ ssh-keygen -t ed25519 -C "my-ubuntu-key"
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 の両方が利用できます。

journalctl / dmesg でフリーズ原因を調査するターミナル操作(Playwright 実撮影)
journalctl / dmesg でフリーズ原因を調査するターミナル操作(Playwright 実撮影)
free -h / dmesg OOM確認コマンドの実測結果(ubuntu:24.04)
free -h / dmesg OOM確認コマンドの実測結果(ubuntu:24.04)

OOMキラーが発動していないか確認する




ubuntu@linuxlab: ~
# dmesg で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

メモリ使用状況を確認する




ubuntu@linuxlab: ~
$ free -h
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状態プロセス(ディスク待ち)を探す




ubuntu@linuxlab: ~
$ ps aux | awk '$8 == "D" {print $2, $8, $11}'
# STAT が "D"(Uninterruptible Sleep)= ディスクI/O待ちで固まっているプロセス
# D状態のプロセスは kill でも落とせない → ディスクI/Oが解決するまで待つしかない

フリーズを予防する

スワップを有効にする

RAMが少ない環境では、スワップ(仮想メモリ)を有効にしておくと OOM キラーが発動しにくくなります。ubuntu:24.04 で確認すると、コンテナ環境でも Swap: 2.0Gi 0B 2.0Gi(合計2GB、使用0B)のスワップが利用可能でした。




ubuntu@linuxlab: ~
# 2GB のスワップファイルを作成して有効にする
$ 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 で即座に終了させる機能もあります。




ubuntu@linuxlab: ~
$ sudo apt install htop -y
# htop 3.3.0-4build1 インストール(ubuntu:24.04)
$ htop
# → プロセスをカーソルキーで選択 → F9 → SIGKILL(9) でEnter

状況別 対処法クイックリファレンス

Ubuntu 22.04 vs 24.04 プロセス管理コマンドバージョン比較(実測)
Ubuntu 22.04 vs 24.04 プロセス管理コマンドバージョン比較(実測)
状況 キーボードは? 推奨手順 備考
特定アプリが固まっている 効く Ctrl+Alt+F3 → kill -9 PID TTY切り替え後にkill
GUIが固まっているが操作できる 効く ターミナル → pskill 最もデータ安全
完全ハング(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各社のスペックと料金の比較は下記の記事にまとめています。

→ 合わせて読みたい:VPS速度・料金比較(Vultr / DigitalOcean / Linode 実測ベンチ)

コメント

タイトルとURLをコピーしました