次の方法で共有


Process.HasExited プロパティ

関連付けられているプロセスが終了したかどうかを示す値を取得します。

Public ReadOnly Property HasExited As Boolean
[C#]
public bool HasExited {get;}
[C++]
public: __property bool get_HasExited();
[JScript]
public function get HasExited() : Boolean;

プロパティ値

Process コンポーネントが参照するオペレーティング システム プロセスが終了している場合は true 。それ以外の場合は false

例外

例外の種類 条件
InvalidOperationException このオブジェクトに関連付けられたプロセスがありません。
Win32Exception プロセスの終了コードを取得できませんでした。

解説

HasExited の値が true の場合は、関連付けられたプロセスが正常終了または異常終了したことを示します。 CloseMainWindow または Kill を呼び出して、関連付けられたプロセスの終了を要求または強制できます。プロセスに対してハンドルが開かれている場合、オペレーティング システムはプロセスの終了時にプロセス メモリを解放しますが、ハンドル、終了コード、終了時刻などの、プロセスに関する管理情報は保持します。この情報を取得するには、 ExitCode プロパティと ExitTime プロパティを使用します。これらのプロパティは、このコンポーネントで起動されたプロセスに自動的に設定されます。管理情報は、システム プロセスに関連付けられたすべての Process コンポーネントが破棄され、終了したプロセスを識別するハンドルがなくなったときに解放されます。

プロセスは、コードから独立して終了できます。このコンポーネントを使用してプロセスを起動した場合は、関連付けられたプロセスが独立して終了した場合でも、システムが HasExited の値を自動的に更新します。

使用例

[Visual Basic, C#, C++] メモ帳のインスタンスを起動する例を次に示します。このコードは、インスタンスが起動すると、2 秒間隔で最大 10 秒間、関連付けられているプロセスの物理メモリ使用量を取得します。また、10 秒が経過する前にプロセスが終了したかどうかを検知します。10 秒経過した後もプロセスが実行中である場合は、プロセスを終了します。

 
Imports System
Imports System.Diagnostics
Imports System.Threading

Namespace Process_Sample
   Class MyProcessClass

      Public Shared Sub Main()
         Try

            Dim myProcess As Process
            myProcess = Process.Start("Notepad.exe")
            ' Display physical memory usage 5 times at intervals of 2 seconds.
            Dim i As Integer
            For i = 0 To 4
               If not myProcess.HasExited Then
               
                  ' Discard cached information about the process.
                  myProcess.Refresh()
                  ' Print working set to console.
                  Console.WriteLine("Physical Memory Usage: " + _
                                              myProcess.WorkingSet.ToString())
                  ' Wait 2 seconds.
                  Thread.Sleep(2000)
               Else 
                  Exit For
               End If
              
            Next i

           ' Close process by sending a close message to its main window.
           myProcess.CloseMainWindow()
           ' Free resources associated with process.
           myProcess.Close()

         Catch e As Exception
            Console.WriteLine("The following exception was raised: ")
            Console.WriteLine(e.Message)
         End Try
      End Sub 'Main
   End Class 'MyProcessClass
End Namespace 'Process_Sample

[C#] 

using System;
using System.Diagnostics;
using System.Threading;

namespace Process_Sample
{
   class MyProcessClass
   {
      public static void Main()
      {
         try
         {
            Process myProcess;
            myProcess = Process.Start("Notepad.exe");
            // Display physical memory usage 5 times at intervals of 2 seconds.
            for (int i = 0;i < 5; i++)
            {
               if (!myProcess.HasExited)
               {
                   // Discard cached information about the process.
                   myProcess.Refresh();
                   // Print working set to console.
                   Console.WriteLine("Physical Memory Usage: " 
                                        + myProcess.WorkingSet.ToString());
                   // Wait 2 seconds.
                   Thread.Sleep(2000);
               }
               else {
                   break;
               } 
            }

            // Close process by sending a close message to its main window.
            myProcess.CloseMainWindow();
            // Free resources associated with process.
            myProcess.Close();

         }
         catch(Exception e)
         {
            Console.WriteLine("The following exception was raised: ");
            Console.WriteLine(e.Message);
         }
      }
   }
}

[C++] 
#using <mscorlib.dll>
#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;

int main() {
    try {
        Process* myProcess;
        myProcess = Process::Start("Notepad.exe");
        // Display physical memory usage 5 times at intervals of 2 seconds.
        for (int i = 0; i < 5; i++) {

            if (!myProcess->HasExited)
            {

               // Discard cached information about the process.
               myProcess->Refresh();
               // Print working set to console.
               Console::WriteLine(S"Physical Memory Usage : {0}", myProcess->WorkingSet.ToString());
               // Wait 2 seconds.
               Thread::Sleep(2000);
            }
            else {
               break;
            }
        }
        // Close process by sending a close message to its main window.
        myProcess->CloseMainWindow();
        // Free resources associated with process.
        myProcess->Close();

    } 
    catch (Exception* e) 
    {
       Console::WriteLine(S"The following exception was raised: ");
       Console::WriteLine(e->Message);
    }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

Process クラス | Process メンバ | System.Diagnostics 名前空間 | ExitCode | ExitTime | WaitForExit | EnableRaisingEvents | OnExited