無限ループで止まらなくなったプログラムを強制終了する方法

無限ループ中のプログラムを強制終了させる方法の解説ページアイキャッチ

このページでは、無限ループに陥って暴走した(止められなくなった)プログラムを強制終了する方法について解説していきます。主に MacOSX 向けの解説ですが、他の OS でも強制終了する際の考え方は同じです。

無限ループにハマってしまったプログラムは放っておいても基本的には終わりません。無限ループ内での処理内容によって途中でエラーが発生して終了してくれる可能性もありますが、基本的にはあなた自身が強制終了してやる必要があります。

無限ループの経験、僕もあるよ!

めちゃめちゃ焦ったからとりあえずパソコンの電源消したよ…

↑ これも1つのプログラムの終了方法の1つですね!

ただ、ここまでやらなくても簡単に強制終了させる方法はたくさんあります。その方法のいくつかをこのページで紹介していきます!

強制終了コマンドを実行する(Ctrl + ccontrol + c

プログラムやスクリプトはコマンドライン上(ターミナルとかコマンドプロンプトとかパワーシェルとか)で実行することが多いと思います。

この場合、プログラム実行中のコマンドライン上で強制終了コマンドを実行することで、プログラムを強制終了させることができます。

強制終了コマンドは OS によって若干異なります(ちょっと PowerShell の場合は自信ないですが…)。

  • Windows:Ctrl + c
  • MacOSX:control + c

MacOSX のターミナルで無限ループするプログラム(main.exe)を実行している最中に control + c を実行した場合、下の図の画面のように ^C が表示されてプログラムが終了します。

control+cを実行した時のターミナル

プロセス管理アプリから終了する

あとは、プロセス管理アプリから無限ループに陥っているプログラムを終了させることもできます。

MacOSX の場合は「アクティブモニタアプリ」がこのプロセス管理アプリとなります。このアクティブモニタアプリは下記の場所にあると思います。

アプリケーション → ユーティリティ

Windows の場合はタスクマネージャーかな?

こういったプロセス管理アプリを起動すれば、下の図のようなプロセス一覧画面が表示されると思います。下の図は MacOSX のアクティブモニタの画面になります。

アクティブモニタでプロセス一覧が表示される様子

この中から無限ループに陥っているプログラム(プロセス)を探し出し、それを終了させてやれば問題は解決します。

アクティブモニタの場合であれば、無限ループしているプログラム名が表示されている行をダブルクリックすれば下の図のような画面が表示されます。

プロセスを終了させるときに表示される画面

ここで終了ボタンをクリックすれば、そのプログラムを終了させることができます(確認画面が出るかもしれませんが、その場合は終了ボタンを再度クリックしてください)。

こういったプロセス一覧から終了させたいプログラムを探し出す際に注目すべきは「CPU 使用率」です。

無限ループをしているということは、そのプログラムの処理を無限に CPU が実行している可能性があり、CPU 使用率が高くなっていることが多いです。

この場合、プロセス一覧を CPU 使用率順に表示してやれば、終了させたいプログラムはすぐに見つけ出すことができます。

プロセス一覧の表示をCPU使用率順に切り替える様子

ただ、無限ループを行なっているからといって CPU 使用率が必ず高いとは限らないので注意してください。例えば無限ループの中で sleep などを行なっている場合は、むしろ CPU 使用率は低いと思います。

スポンサーリンク

デバッガー使えばボタン一つで強制終了可能

おそらくこのページに来てくださった方は、実際にプログラムが無限ループに陥り、そしてそのプログラムが止められなくて焦った人ではないかと思います。

ここまで挙げた方法により、おそらく無限ループに陥ったプログラムも停止できたのではないかと思うのですが、ここで無限ループに陥ったプログラムを一番簡単に終了させる方法を紹介しておきます。

それは、デバッガーを利用することです。要はデバッガーを使ってプログラムを実行できるように開発環境を整えてやれば、無限ループに陥ったプログラムであっても簡単に停止させることができます。

例えば私は VSCode という開発環境を使用しており、この VSCode にプラグインをインストールすることでデバッガーを利用することができます(ちなみに VSCode や私が使用しているデバッガーのプラグインは無料です)。

このデバッガーを利用すれば、プログラム起動時に下の図のようなバーが表示され、赤い四角で表される停止ボタンを押すだけでプログラムを終了させることができます。

VSCodeの停止ボタン

ですので、もし無限ループに陥るようなプログラムを実行したとしても、このボタンを1回クリックするだけで、そのプログラムを終了させることができます。

VSCodeで無限ループ中のプログラムを終了させる手順

開発中のプログラムにバグがあるのは当然ですし、無限ループが起こりうる可能性ももちろんあります。

なので「無限ループが発生するようなプログラムなんて作るな!」なんて言うつもりは無いのですが、そういったことが起こり得ることを見据えて、無限ループのプログラムも簡単に止められる環境は整えておいた方が良いかなぁと思います。

また、こういう環境を用意しておけば、無限ループなどを恐れずに気軽にプログラミングできます(別に無限ループ自体そこまで恐れる必要のあるものではないですが)。

あとは、プログラムを好きな位置で停止させ、その時の変数の中身を表示させたりできるので、無限ループに陥っている原因も突き止めやすいです。

プログラムを好きな位置で停止させる様子

プログラムを一行ずつ停止させながら動作させるようなことも可能ですので、無限ループだけでなく色んなバグの原因を突き止めるのに便利です。

VSCode でデバッガーを導入する手順は下記ページで紹介していますので、興味のある方はぜひ読んでみてください!(MacOSX 向けではありますが…)。

VSCodeでMacOSにC言語デバッグ環境を構築する方法の解説ページアイキャッチVSCodeでMacOSにC言語デバッグ環境を構築

まとめ

このページでは、無限ループに陥って暴走した(止められなくなった)プログラムを強制終了させる方法について解説しました!

ターミナル等のコマンドラインから実行しているプログラムが無限ループに陥ったのであれば、下記のコマンドを実行することでプログラムを強制終了させることが可能です。

  • Windows:Ctrl + c
  • MacOSX:control + c

また、アクティブモニタのようなプロセス管理ツールからプログラムを終了させるようなことも可能です。

無限ループに陥って焦ったのであれば、この機会にデバッガーの導入を検討するのが良いと思います。無限ループなんか恐れずにプログラミングできますよー!