Go to main content

man pages section 3: Extended Library Functions, Volume 1

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

Tcl_Exit (3tcl)

Name

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

Synopsis

#include <tcl.h>

Tcl_Exit(status)

Tcl_Finalize()

Tcl_CreateExitHandler(proc, clientData)

Tcl_DeleteExitHandler(proc, clientData)

Tcl_ExitThread(status)

Tcl_FinalizeThread()

Tcl_CreateThreadExitHandler(proc, clientData)

Tcl_DeleteThreadExitHandler(proc, clientData)

Tcl_ExitProc *
Tcl_SetExitProc(proc)

Description

Tcl_Exit(3tcl)              Tcl Library Procedures              Tcl_Exit(3tcl)



______________________________________________________________________________

NAME
       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)

SYNOPSIS
       #include <tcl.h>

       Tcl_Exit(status)

       Tcl_Finalize()

       Tcl_CreateExitHandler(proc, clientData)

       Tcl_DeleteExitHandler(proc, clientData)

       Tcl_ExitThread(status)

       Tcl_FinalizeThread()

       Tcl_CreateThreadExitHandler(proc, clientData)

       Tcl_DeleteThreadExitHandler(proc, clientData)

       Tcl_ExitProc *
       Tcl_SetExitProc(proc)

ARGUMENTS
       int status (in)                       Provides  information  about  why
                                             the application or thread exited.
                                             Exact meaning  may  be  platform-
                                             specific.  0 usually means a nor-
                                             mal exit, any nonzero value  usu-
                                             ally    means   that   an   error
                                             occurred.

       Tcl_ExitProc *proc (in)               Procedure to invoke before  exit-
                                             ing    application,    or    (for
                                             Tcl_SetExitProc)  NULL  to  unin-
                                             stall   the  current  application
                                             exit procedure.

       ClientData clientData (in)            Arbitrary one-word value to  pass
                                             to proc.
______________________________________________________________________________


DESCRIPTION
       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  any-
       place 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  ter-
       minate  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  argu-
       ment  consisting  of the exit status (cast to ClientData); the applica-
       tion 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.
       Your code should always invoke Tcl_Finalize when Tcl is being unloaded,
       to  ensure  proper cleanup. 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 mem-
       ory.  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 indi-
       cated  by proc and clientData so that no call to proc will be made.  If
       no such handler exists then Tcl_DeleteExitHandler or  Tcl_DeleteThread-
       ExitHandler 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 argu-
       ment passed to proc when it is invoked will be the exit status code (as
       passed to Tcl_Exit) cast to a ClientData value.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       +---------------+------------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE  |
       +---------------+------------------+
       |Availability   | runtime/tcl-8    |
       +---------------+------------------+
       |Stability      | Uncommitted      |
       +---------------+------------------+

SEE ALSO
       exit(n)

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



NOTES
       Source  code  for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This     software     was    built    from    source    available    at
       https://github.com/oracle/solaris-userland.   The  original   community
       source was downloaded from  http://prdownloads.sourceforge.net/tcl/tcl-
       core8.6.7-src.tar.gz.

       Further information about this software can be found on the open source
       community website at https://www.tcl.tk/.



Tcl                                   8.5                       Tcl_Exit(3tcl)