このページでは、無限ループに陥って暴走した(止められなくなった)プログラムを強制終了する方法について解説していきます。主に MacOSX 向けの解説ですが、他の OS でも強制終了する際の考え方は同じです。
無限ループにハマってしまったプログラムは放っておいても基本的には終わりません。無限ループ内での処理内容によって途中でエラーが発生して終了してくれる可能性もありますが、基本的にはあなた自身が強制終了してやる必要があります。
無限ループの経験、僕もあるよ!
めちゃめちゃ焦ったからとりあえずパソコンの電源消したよ…
↑ これも1つのプログラムの終了方法の1つですね!
ただ、ここまでやらなくても簡単に強制終了させる方法はたくさんあります。その方法のいくつかをこのページで紹介していきます!
強制終了コマンドを実行する(Ctrl
+ c
・control
+ c
)
プログラムやスクリプトはコマンドライン上(ターミナルとかコマンドプロンプトとかパワーシェルとか)で実行することが多いと思います。
この場合、プログラム実行中のコマンドライン上で強制終了コマンドを実行することで、プログラムを強制終了させることができます。
強制終了コマンドは OS によって若干異なります(ちょっと PowerShell の場合は自信ないですが…)。
- Windows:
Ctrl
+c
- MacOSX:
control
+c
MacOSX のターミナルで無限ループするプログラム(main.exe
)を実行している最中に control
+ c
を実行した場合、下の図の画面のように ^C
が表示されてプログラムが終了します。
プロセス管理アプリから終了する
あとは、プロセス管理アプリから無限ループに陥っているプログラムを終了させることもできます。
MacOSX の場合は「アクティブモニタアプリ」がこのプロセス管理アプリとなります。このアクティブモニタアプリは下記の場所にあると思います。
アプリケーション → ユーティリティ
Windows の場合はタスクマネージャーかな?
こういったプロセス管理アプリを起動すれば、下の図のようなプロセス一覧画面が表示されると思います。下の図は MacOSX のアクティブモニタの画面になります。
この中から無限ループに陥っているプログラム(プロセス)を探し出し、それを終了させてやれば問題は解決します。
アクティブモニタの場合であれば、無限ループしているプログラム名が表示されている行をダブルクリックすれば下の図のような画面が表示されます。
ここで終了ボタンをクリックすれば、そのプログラムを終了させることができます(確認画面が出るかもしれませんが、その場合は終了ボタンを再度クリックしてください)。
こういったプロセス一覧から終了させたいプログラムを探し出す際に注目すべきは「CPU 使用率」です。
無限ループをしているということは、そのプログラムの処理を無限に CPU が実行している可能性があり、CPU 使用率が高くなっていることが多いです。
この場合、プロセス一覧を CPU 使用率順に表示してやれば、終了させたいプログラムはすぐに見つけ出すことができます。
ただ、無限ループを行なっているからといって CPU 使用率が必ず高いとは限らないので注意してください。例えば無限ループの中で sleep
などを行なっている場合は、むしろ CPU 使用率は低いと思います。
スポンサーリンク
デバッガー使えばボタン一つで強制終了可能
おそらくこのページに来てくださった方は、実際にプログラムが無限ループに陥り、そしてそのプログラムが止められなくて焦った人ではないかと思います。
ここまで挙げた方法により、おそらく無限ループに陥ったプログラムも停止できたのではないかと思うのですが、ここで無限ループに陥ったプログラムを一番簡単に終了させる方法を紹介しておきます。
それは、デバッガーを利用することです。要はデバッガーを使ってプログラムを実行できるように開発環境を整えてやれば、無限ループに陥ったプログラムであっても簡単に停止させることができます。
例えば私は VSCode という開発環境を使用しており、この VSCode にプラグインをインストールすることでデバッガーを利用することができます(ちなみに VSCode や私が使用しているデバッガーのプラグインは無料です)。
このデバッガーを利用すれば、プログラム起動時に下の図のようなバーが表示され、赤い四角で表される停止ボタンを押すだけでプログラムを終了させることができます。
ですので、もし無限ループに陥るようなプログラムを実行したとしても、このボタンを1回クリックするだけで、そのプログラムを終了させることができます。
開発中のプログラムにバグがあるのは当然ですし、無限ループが起こりうる可能性ももちろんあります。
なので「無限ループが発生するようなプログラムなんて作るな!」なんて言うつもりは無いのですが、そういったことが起こり得ることを見据えて、無限ループのプログラムも簡単に止められる環境は整えておいた方が良いかなぁと思います。
また、こういう環境を用意しておけば、無限ループなどを恐れずに気軽にプログラミングできます(別に無限ループ自体そこまで恐れる必要のあるものではないですが)。
あとは、プログラムを好きな位置で停止させ、その時の変数の中身を表示させたりできるので、無限ループに陥っている原因も突き止めやすいです。
プログラムを一行ずつ停止させながら動作させるようなことも可能ですので、無限ループだけでなく色んなバグの原因を突き止めるのに便利です。
VSCode でデバッガーを導入する手順は下記ページで紹介していますので、興味のある方はぜひ読んでみてください!(MacOSX 向けではありますが…)。
VSCodeでMacOSにC言語デバッグ環境を構築まとめ
このページでは、無限ループに陥って暴走した(止められなくなった)プログラムを強制終了させる方法について解説しました!
ターミナル等のコマンドラインから実行しているプログラムが無限ループに陥ったのであれば、下記のコマンドを実行することでプログラムを強制終了させることが可能です。
- Windows:
Ctrl
+c
- MacOSX:
control
+c
また、アクティブモニタのようなプロセス管理ツールからプログラムを終了させるようなことも可能です。
無限ループに陥って焦ったのであれば、この機会にデバッガーの導入を検討するのが良いと思います。無限ループなんか恐れずにプログラミングできますよー!
オススメの参考書(PR)
C言語学習中だけど分からないことが多くて挫折しそう...という方には、下記の「スッキリわかるC言語入門」がオススメです!
まず学習を進める上で、参考書は2冊持っておくことをオススメします。この理由は下記の2つです。
- 参考書によって、解説の仕方は異なる
- 読み手によって、理解しやすい解説の仕方は異なる
ある人の説明聞いても理解できなかったけど、他の人からちょっと違った観点での説明を聞いて「あー、そういうことね!」って簡単に理解できた経験をお持ちの方も多いのではないでしょうか?
それと同じで、1冊の参考書を読んで理解できない事も、他の参考書とは異なる内容の解説を読むことで理解できる可能性があります。
なので、参考書は2冊持っておいた方が学習時に挫折しにくいというのが私の考えです。
特に上記の「スッキリわかるC言語入門」は、他の参考書とは違った切り口での解説が豊富で、他の参考書で理解できなかった内容に対して違った観点での解説を読むことができ、オススメです。題名の通り「なぜそうなるのか?」がスッキリ理解できるような解説内容にもなっており、C言語入門書としてもかなり分かりやすい参考書だと思います。
もちろんネット等でも色んな観点からの解説を読むことが出来ますので、分からない点は別の人・別の参考書の解説を読んで解決していきましょう!もちろん私のサイトも参考にしていただけると嬉しいです!
入門用のオススメ参考書は下記ページでも紹介していますので、こちらも是非参考にしていただければと思います。
https://daeudaeu.com/c_reference_book/