Freigeben über


ExitProcess-Funktion (processthreadsapi.h)

Beendet den aufrufenden Prozess und alle zugehörigen Threads.

Syntax

void ExitProcess(
  [in] UINT uExitCode
);

Parameter

[in] uExitCode

Der Exitcode für den Prozess und alle Threads.

Rückgabewert

Keine

Bemerkungen

Verwenden Sie die GetExitCodeProcess-Funktion , um den Exitwert des Prozesses abzurufen. Verwenden Sie die GetExitCodeThread-Funktion , um den Exitwert eines Threads abzurufen.

Das Beenden eines Prozesses verursacht Folgendes:

  1. Alle Threads im Prozess mit Ausnahme des aufrufenden Threads beenden ihre Ausführung, ohne eine DLL_THREAD_DETACH Benachrichtigung zu erhalten.
  2. Die Zustände aller Threads, die in Schritt 1 beendet wurden, werden signalisiert.
  3. Die Einstiegspunktfunktionen aller geladenen DlLs (Dynamic Link Libraries) werden mit DLL_PROCESS_DETACH aufgerufen.
  4. Nachdem alle angefügten DLLs den Prozessabschlusscode ausgeführt haben, beendet die ExitProcess-Funktion den aktuellen Prozess, einschließlich des aufrufenden Threads.
  5. Der Zustand des aufrufenden Threads wird signalisiert.
  6. Alle vom Prozess geöffneten Objekthandles werden geschlossen.
  7. Die status des Prozesses ändert sich von STILL_ACTIVE zum Exitwert des Prozesses.
  8. Der Status des Prozessobjekts wird signalisiert und erfüllt alle Threads, die auf das Beenden des Prozesses gewartet haben.
Wenn einer der beendeten Threads im Prozess eine Sperre enthält und der DLL-Trenncode in einer der geladenen DLLs versucht, die gleiche Sperre zu erhalten, führt der Aufruf von ExitProcess zu einem Deadlock. Wenn ein Prozess hingegen durch Aufrufen von TerminateProcess beendet wird, werden die DLLs, an die der Prozess angefügt ist, nicht über die Beendigung des Prozesses benachrichtigt. Wenn Sie den Status aller Threads in Ihrem Prozess nicht kennen, ist es daher besser , TerminateProcess als ExitProcess aufzurufen. Beachten Sie, dass die Rückgabe von der Standard-Funktion einer Anwendung zu einem Aufruf von ExitProcess führt.

Das Aufrufen von ExitProcess in einer DLL kann zu unerwarteten Anwendungs- oder Systemfehlern führen. Achten Sie darauf , ExitProcess nur aus einer DLL aufzurufen, wenn Sie wissen, welche Anwendungen oder Systemkomponenten die DLL laden werden und dass es sicher ist, ExitProcess in diesem Kontext aufzurufen.

Das Beenden eines Prozesses führt nicht dazu, dass untergeordnete Prozesse beendet werden.

Wenn Sie einen Prozess beenden, wird das Prozessobjekt nicht unbedingt aus dem Betriebssystem entfernt. Ein Prozessobjekt wird gelöscht, wenn das letzte Handle für den Prozess geschlossen wird.

Beispiele

Ein Beispiel finden Sie unter Erstellen eines untergeordneten Prozesses mit umgeleiteter Eingabe und Ausgabe.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile processthreadsapi.h (enthalten Windows.h unter Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

Prozess- und Threadfunktionen

Prozesse

TerminateProcess

Beenden eines Prozesses