Tcl_Exit, Tcl_Finalize, Tcl_CreateExitHandler, Tcl_DeleteExitHandler, Tcl_ExitThread, Tcl_FinalizeThread, Tcl_CreateThreadExitHandler, Tcl_DeleteThreadExitHandler, Tcl_SetExitProc − end the application or thread (and invoke exit handlers)


#include <tcl.h>



Tcl_CreateExitHandler(proc, clientData)

Tcl_DeleteExitHandler(proc, clientData)



Tcl_CreateThreadExitHandler(proc, clientData)

Tcl_DeleteThreadExitHandler(proc, clientData)

Tcl_ExitProc * │
(proc) │


int status (in)

Provides information about why the application or thread exited. Exact meaning may be platform-specific. 0 usually means a normal exit, any nonzero value usually means that an error occurred.

Tcl_ExitProc *proc (in)

Procedure to invoke before exiting application, or (for Tcl_SetExitProc) NULL to uninstall the current application exit procedure.

ClientData clientData (in)

Arbitrary one-word value to pass to proc.



The procedures described here provide a graceful mechanism to end the execution of a Tcl application. Exit handlers are invoked to cleanup the application’s state before ending the execution of Tcl code.

Invoke Tcl_Exit to end a Tcl application and to exit from this process. This procedure is invoked by the exit command, and can be invoked anyplace else to terminate the application. No-one should ever invoke the exit system procedure directly; always invoke Tcl_Exit instead, so that it can invoke exit handlers. Note that if other code invokes exit system procedure directly, or otherwise causes the application to terminate without calling Tcl_Exit, the exit handlers will not be run. Tcl_Exit internally invokes the exit system call, thus it never returns control to its caller. If an application exit handler has been │ installed (see Tcl_SetExitProc), that handler is invoked with an │ argument consisting of the exit status (cast to ClientData); the │ application exit handler should not return control to Tcl.

Tcl_Finalize is similar to Tcl_Exit except that it does not exit from the current process. It is useful for cleaning up when a process is finished using Tcl but wishes to continue executing, and when Tcl is used in a dynamically loaded extension that is about to be unloaded. On some systems Tcl is automatically notified when it is being unloaded, and it calls Tcl_Finalize internally; on these systems it not necessary for the caller to explicitly call Tcl_Finalize. However, to ensure portability, your code should always invoke Tcl_Finalize when Tcl is being unloaded, to ensure that the code will work on all platforms. Tcl_Finalize can be safely called more than once.

Tcl_ExitThread is used to terminate the current thread and invoke per-thread exit handlers. This finalization is done by Tcl_FinalizeThread, which you can call if you just want to clean up per-thread state and invoke the thread exit handlers. Tcl_Finalize calls Tcl_FinalizeThread for the current thread automatically.

Tcl_CreateExitHandler arranges for proc to be invoked by Tcl_Finalize and Tcl_Exit. Tcl_CreateThreadExitHandler arranges for proc to be invoked by Tcl_FinalizeThread and Tcl_ExitThread. This provides a hook for cleanup operations such as flushing buffers and freeing global memory. Proc should match the type Tcl_ExitProc:

typedef void Tcl_ExitProc(ClientData clientData);

The clientData parameter to proc is a copy of the clientData argument given to Tcl_CreateExitHandler or Tcl_CreateThreadExitHandler when the callback was created. Typically, clientData points to a data structure containing application-specific information about what to do in proc.

Tcl_DeleteExitHandler and Tcl_DeleteThreadExitHandler may be called to delete a previously-created exit handler. It removes the handler indicated by proc and clientData so that no call to proc will be made. If no such handler exists then Tcl_DeleteExitHandler or Tcl_DeleteThreadExitHandler does nothing.

Tcl_Finalize and Tcl_Exit execute all registered exit handlers, in reverse order from the order in which they were registered. This matches the natural order in which extensions are loaded and unloaded; if extension A loads extension B, it usually unloads B before it itself is unloaded. If extension A registers its exit handlers before loading extension B, this ensures that any exit handlers for B will be executed before the exit handlers for A.

Tcl_Finalize and Tcl_Exit call Tcl_FinalizeThread and the thread exit handlers after the process-wide exit handlers. This is because thread finalization shuts down the I/O channel system, so any attempt at I/O by the global exit handlers will vanish into the bitbucket.

Tcl_SetExitProc installs an application exit handler, returning the │ previously-installed application exit handler or NULL if no application │ handler was installed. If an application exit handler is installed, │ that exit handler takes over complete responsibility for finalization │ of Tcl’s subsystems via Tcl_Finalize at an appropriate time. The │ argument passed to proc when it is invoked will be the exit status code │ (as passed to Tcl_Exit) cast to a ClientData value.


callback, cleanup, dynamic loading, end application, exit, unloading, thread

More Linux Commands

XcmsCIELuvQueryMinL(3) - obtain the CIE L*u*v* coordinates
The XcmsCIELuvQueryMaxC function, given a hue angle and lightness, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*u

wineserver(1) - the Wine server (Commands - Linux man page)
wineserver is a daemon process that provides to Wine roughly the same services that the Windows kernel provides on Windows. wineserver is normally launched auto

XkbGetXlibControls(3) - Determines the current state of the
XkbGetXlibControls returns the current state of the Library Controls as a bit mask that is an inclusive OR of the control masks from Table 1 for the controls th

ldap_scherr2str(3) - Schema definition handling routines....
These routines are used to parse schema definitions in the syntax defined in RFC 4512 into structs and handle these structs. These routines handle four kinds of

ntpdc(1) - special NTP query program - Linux manual page....
This manual page briefly documents the ntpdc command. The [= prog-name =] utility program is used to query an NTP daemon about its current state and to request

times(2) - get process times (System - Linux man page)......
times() stores the current process times in the struct tms that buf points to. The struct tms is as defined in &lt;sys/times.h&gt;: struct tms { clock_t tms_utime; /*

fop-fontlist(1) - (unknown subject) - Linux manual page.....
xmlgraphics-fop-fontlist Classname: xmlgraphicsfopfontlist [c CONFIG_FILE] [f MIME] [[outputdir | outputfile]..(Man)

XtAddEventHandler(3) - add and remove event handlers........
The XtAddEventHandler function registers a procedure with the dispatch mechanism that is to be called when an event that matches the mask occurs on the specifie

XRemoveHost(3) - control host access and host control struct
The XAddHost function adds the specified host to the access control list for that display. The server must be on the same host as the client issuing the command

TAP::Parser::SourceHandler::Handle(3pm) - Stream TAP from an
This is a raw TAP stored in an IO Handle TAP::Parser::SourceHandler class. It has 2 jobs: 1. Figure out if the TAP::Parser::Source its given is an IO::Handle or

audit_log_user_semanage_message(3) - log a semanage message
This function will log a message to the audit system using a predefined message format. It should be used for all SE linux user and role manipulation operations

gsbj(1) Format and print text using ghostscript br gsbj Form
This utility provides functionality approximately equivalent to the Unix enscript(1) program. It prints plain text files using a single font. It currently handl

We can't live, work or learn in freedom unless the software we use is free.