The process termination functions abort, exit, and _exit end all threads within the process, not just the thread that calls the termination function.
In general, you should allow only thread 1 to terminate a process, and only after all other threads have ended. However, if your program exits from a signal or exception handler it may be necessary to terminate the process from a thread other than thread 1.
A routine that resides in a DLL must not terminate the process, except in the case of a critical error. If the DLL and the executable for the process have different run-time libraries, terminating the process from the DLL would bypass any _onexit or atexit functions that the executable may have registered.
![]()
Multithreaded Applications
Signal and Exception
Handling
![]()
Create and Delete Threads (Windows)
Create and Delete Threads (OS/2)
![]()
Asynchronous Exceptions
Signal and Exception
Handlers in Multithreaded Applications