
私の知る限りでは、アプリ (またはフリーズしたアプリ) を停止したいときは、必ずタスク マネージャーを開いてアプリを選択し、Go to Process
プロセスを終了します。「タスクの終了」よりも「プロセスの終了」が優先されます (「タスクの終了」が機能しない場合もあります)。
タスク終了時の画像:
終了プロセスのイメージ:
しかし、http://technet.microsoft.com/en-us/library/bb726964.aspx:
プロセスを調べる際、アプリケーションにはメイン プロセスがありますが、1 つのアプリケーションが複数のプロセスを開始する場合があることに注意してください。通常、これらのプロセスはメイン アプリケーション プロセスに依存しており、メイン アプリケーション プロセスを終了するか、タスクの終了を使用すると停止します。このため、通常は、依存プロセスではなく、メイン アプリケーション プロセスまたはアプリケーション自体を終了する必要があります。
アプリを停止するとプロセスも停止するので、「タスクの終了」よりも好ましいと言われています。しかし、その論理が全く理解できません。なぜ単にプロセスを停止しないのでしょうか?
Ending Task
には と比べてどんな利点がありますかEnding Process
?
答え1
少なくとも1つのウィンドウを持つプログラムの場合、タスク終了X「閉じる」ボタンをクリックするのと同じことを行います。つまり、WM_CLOSE
そのウィンドウにメッセージを送信し、閉じるように丁寧に要求します。(コンソールウィンドウの場合、同等のことはCTRL_CLOSE_EVENT
) プログラムは、ユーザーに変更を保存するよう要求したり、さまざまなクリーンアップ タスクを実行したりできます。プロセスがこれに従うと、タスク マネージャーは数秒待機し、まだ実行中の場合はプロセスの終了に進みます。
プロセスがフリーズしたり、受信したウィンドウメッセージを処理していない場合は、もちろん、タスク終了また、[閉じる] ボタンも機能しません。このような場合、Windows は通常、プログラムが応答するのに十分な時間を与えた後でのみ、プログラムを強制的に終了するように要求します。
一方、最終過程ボタンはタスクやウィンドウには関係しません。TerminateProcess()
関数を呼び出すと、Windows は通知したりクリーンアップする機会を与えたりすることなく、直ちにプロセスを破棄します。
(プロセスが終了するとメモリなどのリソースは自動的に解放されますが、プログラムが作成した各種一時ファイルは残る可能性があり、もちろんデータの保存途中でプロセスが終了するとデータが破損するリスクがあります。)
参照:
- Visual Studio マガジン。アプリを優しく終了する
答え2
他の2つの回答は、違いが何であるかをうまく説明しています。何起こることはありますが、その違いを理解するためにどうやってそれが起こると、前者はプログラムを閉じるように指示し、後者はWindowsに殺すプログラム。
例えるなら、荷物をまとめて部屋から出て行くように頼むのと、警備員にすぐに強制的に部屋から追い出すように言うのとでは、違いがあるようなものです。
答え3
詳しく説明すると、タスクの終了はアプリを正常に終了しようとします。ハングしている場合は、「今すぐ終了」オプションが表示されます。これにより、プロセスを強制終了する (強制的に消去する) よりも 2 つの利点があります。
- Windows Vista(およびそれ以降)に登録されたアプリのクラッシュ回復を有効にします簡単なMSDNの説明
- エラーレポートの送信を許可する
答え4
それは単に用語の不一致です。おそらく、西海岸の Microsoft ヘルプデスクではタスクと言い、東海岸では技術的に正しいプロセスを使用しているのでしょう。
技術的には、それでもプロセスは終了します。タスクはおそらくウィンドウを表示するプロセスのラッパーでしょうか? タスク マネージャーのヘルプではどちらも定義されていません。