Share via


ExitProcess, fonction (processthreadsapi.h)

Termine le processus appelant et tous ses threads.

Syntaxe

void ExitProcess(
  [in] UINT uExitCode
);

Paramètres

[in] uExitCode

Code de sortie pour le processus et tous les threads.

Valeur de retour

None

Remarques

Utilisez la fonction GetExitCodeProcess pour récupérer la valeur de sortie du processus. Utilisez la fonction GetExitCodeThread pour récupérer la valeur de sortie d’un thread.

La fermeture d’un processus entraîne les événements suivants :

  1. Tous les threads du processus, à l’exception du thread appelant, terminent leur exécution sans recevoir de notification DLL_THREAD_DETACH.
  2. Les états de tous les threads terminés à l’étape 1 sont signalés.
  3. Les fonctions de point d’entrée de toutes les bibliothèques de liens dynamiques (DLL) chargées sont appelées avec DLL_PROCESS_DETACH.
  4. Une fois que toutes les DLL jointes ont exécuté un code d’arrêt de processus, la fonction ExitProcess termine le processus actuel, y compris le thread appelant.
  5. L’état du thread appelant est signalé.
  6. Tous les descripteurs d’objet ouverts par le processus sont fermés.
  7. La status d’arrêt du processus passe de STILL_ACTIVE à la valeur de sortie du processus.
  8. L’état de l’objet de processus est signalé, satisfaisant tous les threads qui attendaient l’arrêt du processus.
Si l’un des threads terminés du processus contient un verrou et que le code de détachement de la DLL dans l’une des DLL chargées tente d’acquérir le même verrou, l’appel de ExitProcess entraîne un interblocage. En revanche, si un processus s’arrête en appelant TerminateProcess, les DLL auxquelles le processus est attaché ne sont pas informées de l’arrêt du processus. Par conséquent, si vous ne connaissez pas l’état de tous les threads de votre processus, il est préférable d’appeler TerminateProcess plutôt que ExitProcess. Notez que le retour à partir de la fonction main d’une application entraîne un appel à ExitProcess.

L’appel de ExitProcess dans une DLL peut entraîner des erreurs système ou d’application inattendues. Veillez à appeler ExitProcess à partir d’une DLL uniquement si vous savez quelles applications ou composants système vont charger la DLL et qu’il est sûr d’appeler ExitProcess dans ce contexte.

La sortie d’un processus n’entraîne pas l’arrêt des processus enfants.

La sortie d’un processus ne supprime pas nécessairement l’objet de processus du système d’exploitation. Un objet de processus est supprimé lorsque le dernier handle du processus est fermé.

Exemples

Pour obtenir un exemple, consultez Création d’un processus enfant avec une entrée et une sortie redirigées.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête processthreadsapi.h (inclure Windows.h sur Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

Fonctions de processus et de thread

Processus

TerminateProcess

Arrêt d’un processus