Condividi tramite


Funzione ExitProcess (processthreadsapi.h)

Termina il processo chiamante e tutti i relativi thread.

Sintassi

void ExitProcess(
  [in] UINT uExitCode
);

Parametri

[in] uExitCode

Codice di uscita per il processo e tutti i thread.

Valore restituito

nessuno

Osservazioni

Usare la funzione GetExitCodeProcess per recuperare il valore di uscita del processo. Usare la funzione GetExitCodeThread per recuperare il valore di uscita di un thread.

Se si esce da un processo, si verifica quanto segue:

  1. Tutti i thread del processo, ad eccezione del thread chiamante, terminano l'esecuzione senza ricevere una notifica di DLL_THREAD_DETACH.
  2. Gli stati di tutti i thread terminati nel passaggio 1 diventano segnalato.
  3. Le funzioni del punto di ingresso di tutte le DLL (Dynamic Link Librarie) caricate vengono chiamate con DLL_PROCESS_DETACH.
  4. Dopo che tutte le DLL associate hanno eseguito qualsiasi codice di terminazione del processo, la funzione ExitProcess termina il processo corrente, incluso il thread chiamante.
  5. Lo stato del thread chiamante viene segnalato.
  6. Tutti gli handle di oggetto aperti dal processo vengono chiusi.
  7. Lo stato di terminazione del processo passa da STILL_ACTIVE al valore di uscita del processo.
  8. Lo stato dell'oggetto processo viene segnalato, soddisfacendo tutti i thread in attesa che il processo venga terminato.
Se uno dei thread terminati nel processo contiene un blocco e il codice di scollegamento della DLL in una delle DLL caricate tenta di acquisire lo stesso blocco, la chiamata a ExitProcess genera un deadlock. Al contrario, se un processo termina chiamando TerminateProcess, le DLL a cui è collegato il processo non ricevono alcuna notifica della terminazione del processo. Pertanto, se non si conosce lo stato di tutti i thread nel processo, è preferibile chiamare TerminateProcess rispetto a ExitProcess. Si noti che la restituzione dalla funzione principale di un'applicazione comporta una chiamata a ExitProcess.

La chiamata a ExitProcess in una DLL può causare errori imprevisti dell'applicazione o del sistema. Assicurarsi di chiamare ExitProcess da una DLL solo se si conoscono le applicazioni o i componenti di sistema che caricheranno la DLL e che è possibile chiamare ExitProcess in questo contesto.

L'uscita da un processo non comporta la terminazione dei processi figlio.

L'uscita da un processo non comporta necessariamente la rimozione dell'oggetto processo dal sistema operativo. Un oggetto processo viene eliminato quando l'ultimo handle per il processo viene chiuso.

Esempio

Per un esempio, vedere Creazione di un processo figlio con input e output reindirizzati.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione processthreadsapi.h (include Windows.h in Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

Funzioni di processi e thread

Processi

TerminateProcess

Terminazione di un processo