ExitProcess-Funktion (processthreadsapi.h)

Beendet den Aufrufvorgang 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 Exit-Wert eines Threads abzurufen.

Durch das Beenden eines Prozesses wird Folgendes verursacht:

  1. Alle Threads im Prozess mit Ausnahme des aufrufenden Threads beenden die Ausführung, ohne eine DLL_THREAD_DETACH Benachrichtigung zu empfangen.
  2. Die Zustände aller in Schritt 1 beendeten Threads werden signalisiert.
  3. Die Einstiegspunktfunktionen aller geladenen Dynamic-Link-Bibliotheken (DLLs) werden mit DLL_PROCESS_DETACH aufgerufen.
  4. Nachdem alle angefügten DLLs einen Prozessendecode ausgeführt haben, beendet die ExitProcess-Funktion den aktuellen Prozess, einschließlich des aufrufenden Threads.
  5. Der Status des aufrufenden Threads wird signalisiert.
  6. Alle vom Prozess geöffneten Objektziehpunkte werden geschlossen.
  7. Der Beendigungsstatus des Prozesses ändert sich von STILL_ACTIVE zum Ausgangswert des Prozesses.
  8. Der Status des Prozessobjekts wird signalisiert und erfüllt alle Threads, die auf das Beenden des Prozesses warten.
Wenn eines der beendeten Threads im Prozess eine Sperre enthält und der DLL-Code in einem der geladenen DLLs versucht, dieselbe Sperre abzurufen, führt das Aufrufen von ExitProcess zu einem Deadlock. Wenn ein Prozess dagegen 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 daher nicht den Status aller Threads in Ihrem Prozess kennen, ist es besser, "TerminateProcess " als "ExitProcess" aufzurufen. Beachten Sie, dass die Rückgabe von der Hauptfunktion einer Anwendung zu einem Aufruf von ExitProcess führt.

Das Aufrufen von ExitProcess in einer DLL kann zu unerwarteten Anwendungs- oder Systemfehlern führen. Rufen Sie ExitProcess von einer DLL nur auf, wenn Sie wissen, welche Anwendungen oder Systemkomponenten die DLL laden und dass exitProcess in diesem Kontext sicher ist.

Durch das Beenden eines Prozesses werden untergeordnete Prozesse nicht beendet.

Durch das Beenden eines Prozesses wird das Prozessobjekt nicht unbedingt aus dem Betriebssystem entfernt. Ein Prozessobjekt wird gelöscht, wenn der letzte Handle für den Prozess geschlossen wird.

Beispiele

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

Anforderungen

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

Siehe auch

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

Prozess- und Threadfunktionen

Prozesse

TerminateProcess

Beenden eines Prozesses