1.0.13.20: added SB-EXT:*EXIT-HOOKS*
[sbcl.git] / doc / manual / start-stop.texinfo
index aca62d8..77940c2 100644 (file)
@@ -3,10 +3,11 @@
 @chapter Starting and Stopping
 
 @menu
-* Starting SBCL::               
-* Stopping SBCL::               
-* Command Line Options::        
-* Initialization Files::        
+* Starting SBCL::
+* Stopping SBCL::
+* Command Line Options::
+* Initialization Files::
+* Initialization and Exit Hooks::
 @end menu
 
 @node Starting SBCL
@@ -14,9 +15,9 @@
 @section Starting SBCL
 
 @menu
-* Running from Shell::          
-* Running from Emacs::          
-* Shebang Scripts::             
+* Running from Shell::
+* Running from Emacs::
+* Shebang Scripts::
 @end menu
 
 @node Running from Shell
@@ -77,9 +78,10 @@ an example.)
 @section Stopping SBCL
 
 @menu
-* Quit::                        
-* End of File::                 
-* Exit on Errors::              
+* Quit::
+* End of File::
+* Saving a Core Image::
+* Exit on Errors::
 @end menu
 
 @node Quit
@@ -101,6 +103,22 @@ By default SBCL also exits on end of input, caused either by user
 pressing @kbd{Control-D} on an attached terminal, or end of input when
 using SBCL as part of a shell pipeline.
 
+@node Saving a Core Image
+@comment  node-name,  next,  previous,  up
+@subsection Saving a Core Image
+
+SBCL has the ability to save its state as a file for later
+execution. This functionality is important for its bootstrapping
+process, and is also provided as an extension to the user.
+
+@include fun-sb-ext-save-lisp-and-die.texinfo
+@include var-sb-ext-star-save-hooks-star.texinfo
+
+To facilitate distribution of SBCL applications using external
+resources, the filesystem location of the SBCL core file being used is
+available from Lisp.
+
+@include var-sb-ext-star-core-pathname-star.texinfo
 
 @node Exit on Errors
 @comment  node-name,  next,  previous,  up
@@ -109,9 +127,7 @@ using SBCL as part of a shell pipeline.
 SBCL can also be configured to exit if an unhandled error occurs,
 which is mainly useful for acting as part of a shell pipeline; doing
 so under most other circumstances would mean giving up large parts of
-the flexibility and robustness of Common Lisp. See @ref{Starting the
-Debugger}.
-
+the flexibility and robustness of Common Lisp. See @ref{Debugger Entry}.
 
 @node Command Line Options
 @comment  node-name,  next,  previous,  up
@@ -149,8 +165,8 @@ passed on to the user program even if they was intended for the
 runtime system or the Lisp system.
 
 @menu
-* Runtime Options::             
-* Toplevel Options::            
+* Runtime Options::
+* Toplevel Options::
 @end menu
 
 @node Runtime Options
@@ -165,6 +181,10 @@ the Lisp core file is a user-created core file, it may run a
 nonstandard toplevel which does not recognize the standard toplevel
 options.
 
+@item --dynamic-space-size @var{megabytes}
+Size of the dynamic space reserved on startup in megabytes. Default
+value is platform dependent.
+
 @item --noinform
 Suppress the printing of any banner or other informational message at
 startup. This makes it easier to write Lisp programs which work
@@ -194,16 +214,19 @@ chance to see it.
 
 @item --sysinit @var{filename}
 Load filename instead of the default system initialization file
-(@pxref{System Initialization File}.) There is no special option to
-cause no system initialization file to be read, but on a Unix
-system ``@code{"--sysinit /dev/null}'' can be used to achieve the same
-effect.
+(@pxref{System Initialization File}.)
+
+@item --no-sysinit
+Don't load a system-wide initialization file.  If this option is given,
+the @code{--sysinit} option is ignored.
 
 @item --userinit @var{filename}
 Load filename instead of the default user initialization file
-(@pxref{User Initialization File}.) There is no special option to
-cause no user initialization file to be read, but ``@code{--userinit
-/dev/null}'' can be used to achieve the same effect.
+(@pxref{User Initialization File}.)
+
+@item --no-userinit
+Don't load a user initialization file.  If this option is given,
+the @code{--userinit} option is ignored.
 
 @item --eval @var{command}
 After executing any initialization file, but before starting the
@@ -226,7 +249,7 @@ cleanly in Unix pipelines.
 
 @item --disable-debugger
 This is equivalent to @code{--eval '(sb-ext:disable-debugger)'}.
-@xref{Starting the Debugger}.
+@xref{Debugger Entry}.
 
 @end table
 
@@ -235,14 +258,14 @@ This is equivalent to @code{--eval '(sb-ext:disable-debugger)'}.
 @comment  node-name,  next,  previous,  up
 @section Initialization Files
 
-This section covers initialization files loaded at startup, which can
-be used to customize the lisp environment.
+This section covers initialization files processed at startup, which
+can be used to customize the lisp environment.
 
 @menu
-* System Initialization File::  
-* User Initialization File::    
-* Initialization File Semantics::  
-* Initialization Examples::     
+* System Initialization File::
+* User Initialization File::
+* Initialization File Semantics::
+* Initialization Examples::
 @end menu
 
 @node System Initialization File
@@ -268,12 +291,10 @@ No user initialization file is required.
 @comment  node-name,  next,  previous,  up
 @subsection Initialization File Semantics
 
-SBCL uses @code{load} to process its initialization files, which
-has the unfortunate effect of preventing users from changing the
-default startup @code{*package*}, and setting a default optimization
-policy.
-
-This is considered a bug and liable to change in the future.
+SBCL processes initialization files with @code{read} and @code{eval},
+not @code{load}; hence initialization files can be used to set startup
+@code{*package*} and @code{*readtable*}, and for proclaiming a global
+optimization policy.
 
 @node Initialization Examples
 @comment  node-name,  next,  previous,  up
@@ -283,13 +304,15 @@ Some examples of what you may consider doing in the initialization
 files follow.
 
 @menu
-* Unix-style Command Line Protocol::  
-* Automatic Recompilation of Stale Fasls::  
+* Unix-style Command Line Protocol::
+* Automatic Recompilation of Stale Fasls::
 @end menu
 
 @node Unix-style Command Line Protocol
 @comment  node-name,  next,  previous,  up
 @subsubsection Unix-style Command Line Protocol
+@vindex sb-ext:*posix-argv*
+@vindex *posix-argv*
 
 Standard Unix tools that are interpreters follow a common command line
 protocol that is necessary to work with ``shebang scripts''. SBCL
@@ -299,7 +322,8 @@ initialization file does the trick:
 @lisp
 ;;; If the first user-processable command-line argument is a filename,
 ;;; disable the debugger, load the file handling shebang-line and quit.
-(let ((script (and (second *posix-argv*) (probe-file (second *posix-argv*)))))
+(let ((script (and (second *posix-argv*)
+                   (probe-file (second *posix-argv*)))))
    (when script
       ;; Handle shebang-line
       (set-dispatch-macro-character #\# #\!
@@ -307,12 +331,13 @@ initialization file does the trick:
                                        (declare (ignore char arg))
                                        (read-line stream)))
       ;; Disable debugger
-      (setf *invoke-debugger-hook* (lambda (condition hook)
-                                      (declare (ignore hook))
-                                      ;; Uncomment to get backtraces on errors
-                                      ;; (sb-debug:backtrace 20)
-                                      (format *error-output* "Error: ~A~%" condition)
-                                      (quit)))
+      (setf *invoke-debugger-hook*
+            (lambda (condition hook)
+              (declare (ignore hook))
+              ;; Uncomment to get backtraces on errors
+              ;; (sb-debug:backtrace 20)
+              (format *error-output* "Error: ~A~%" condition)
+              (quit)))
       (load script)
       (quit)))
 @end lisp
@@ -355,11 +380,22 @@ handles recompilation automatically for ASDF-based systems.
 @lisp
 (require :asdf)
 
-;;; If a fasl was stale, try to recompile and load (once). 
-(defmethod asdf:perform :around ((o asdf:load-op) (c asdf:cl-source-file))
+;;; If a fasl was stale, try to recompile and load (once).
+(defmethod asdf:perform :around ((o asdf:load-op)
+                                 (c asdf:cl-source-file))
    (handler-case (call-next-method o c)
       ;; If a fasl was stale, try to recompile and load (once).
       (sb-ext:invalid-fasl ()
          (asdf:perform (make-instance 'asdf:compile-op) c)
          (call-next-method))))
 @end lisp
+
+@node Initialization and Exit Hooks
+@comment  node-name,  next,  previous,  up
+@section Initialization and Exit Hooks
+
+SBCL provides hooks into the system initialization and exit.
+
+@include var-sb-ext-star-init-hooks-star.texinfo
+@include var-sb-ext-star-exit-hooks-star.texinfo
+