ここでは、指定したプロセスを終了させる方法を紹介します。
なおここで紹介している方法はProcessクラスを使用しているため、まず終了させたいプロセスを表すProcessオブジェクトを取得する必要があります。これは、自分で作成したProcessであれば簡単ですが、そうでなければ結構大変です。目的のProcessオブジェクトを取得する方法については、以下のような記事を参考にしてください。
強制的にプロセスを終了するには、ProcessクラスのKillメソッドを使います。このメソッドはローカルコンピュータで実行されているプロセスにだけ使用でき、リモートコンピュータ上で実行中のプロセスには使用できません。
Killメソッドは非同期的に実行されます。プロセスが終了するまで待機するには、Process.WaitForExitメソッドを使います。
次の例では、メモ帳をすべて強制終了しています。
'notepadのプロセスを取得 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcessesByName("notepad") For Each p As System.Diagnostics.Process In ps 'プロセスを強制的に終了させる p.Kill() Next
//notepadのプロセスを取得 System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("notepad"); foreach (System.Diagnostics.Process p in ps) { //プロセスを強制的に終了させる p.Kill(); }
グラフィカルインターフェイスのあるプロセスを安全に終了させるためには、Process.Killを使用するのではなく、Process.CloseMainWindowメソッドを使用します。CloseMainWindowメソッドはプロセスのメインウィンドウにクローズメッセージを送信し、プロセスの終了を要求します。要求するだけですので、実際には終了しない可能性もあります。
下の例では、開いているすべてのメモ帳を閉じるように要求しています。
'notepadのプロセスを取得 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcessesByName("notepad") For Each p As System.Diagnostics.Process In ps 'クローズメッセージを送信する p.CloseMainWindow() 'プロセスが終了するまで最大10秒待機する p.WaitForExit(10000) 'プロセスが終了したか確認する If p.HasExited Then Console.WriteLine("メモ帳が終了しました。") Else Console.WriteLine("メモ帳が終了しませんでした。") End If Next
//notepadのプロセスを取得 System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("notepad"); foreach (System.Diagnostics.Process p in ps) { //クローズメッセージを送信する p.CloseMainWindow(); //プロセスが終了するまで最大10秒待機する p.WaitForExit(10000); //プロセスが終了したか確認する if (p.HasExited) { Console.WriteLine("メモ帳が終了しました。"); } else { Console.WriteLine("メモ帳が終了しませんでした。"); } }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。