blob: 47056879c30cb993a379b756790bebc5f8e4cd8e [file] [log] [blame]
% File src/library/base/man/quit.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2014 R Core Team
% Distributed under GPL 2 or later
\name{quit}
\alias{quit}
\alias{q}
\alias{.Last}
\alias{.Last.sys}
\title{Terminate an R Session}
\usage{
quit(save = "default", status = 0, runLast = TRUE)
q(save = "default", status = 0, runLast = TRUE)
}
\arguments{
\item{save}{a character string indicating whether the environment
(workspace) should be saved, one of \code{"no"}, \code{"yes"},
\code{"ask"} or \code{"default"}.}
\item{status}{the (numerical) error status to be returned to the
operating system, where relevant. Conventionally \code{0}
indicates successful completion.}
\item{runLast}{should \code{.Last()} be executed?}
}
\description{
The function \code{quit} or its alias \code{q} terminate the current
\R session.
}
\details{
\code{save} must be one of \code{"no"}, \code{"yes"},
\code{"ask"} or \code{"default"}. In the first case the workspace
is not saved, in the second it is saved and in the third the user is
prompted and can also decide \emph{not} to quit. The default is to
ask in interactive use but may be overridden by command-line
arguments (which must be supplied in non-interactive use).
Immediately \emph{before} normal termination, \code{.Last()} is
executed if the function \code{.Last} exists and \code{runLast} is
true. If in interactive use there are errors in the \code{.Last}
function, control will be returned to the command prompt, so do test
the function thoroughly. There is a system analogue,
\code{.Last.sys()}, which is run after \code{.Last()} if
\code{runLast} is true.
Exactly what happens at termination of an \R session depends on the
platform and GUI interface in use. A typical sequence is to run
\code{.Last()} and \code{.Last.sys()} (unless \code{runLast} is
false), to save the workspace if requested (and in most cases also
to save the session history: see \code{\link{savehistory}}), then
run any finalizers (see \code{\link{reg.finalizer}}) that have been
set to be run on exit, close all open graphics devices, remove the
session temporary directory and print any remaining warnings
(e.g., from \code{.Last()} and device closure).
Some error status values are used by \R itself. The default error
handler for non-interactive use effectively calls \code{q("no", 1,
FALSE)} and returns error status 1. Error status 2 is used for \R
\sQuote{suicide}, that is a catastrophic failure, and other small
numbers are used by specific ports for initialization failures. It
is recommended that users choose statuses of 10 or more.
Valid values of \code{status} are system-dependent, but \code{0:255}
are normally valid. (Many OSes will report the last byte of the
value, that is report the value modulo 256. But not all.)
#ifdef windows
% https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true
% https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/if.mspx?mfr=true
Windows calls the status the \sQuote{error code} or \sQuote{exit
code}. It is returned in the environment variable
\env{\%ERRORLEVEL\%} in \code{cmd.exe}, and in \env{LASTEXITCODE}
in Windows PowerShell. Note that the \code{Rterm} reliably reports
the \code{status} value, but \code{Rgui} may give an error code from
the GUI interface.
#endif
}
\references{
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
\emph{The New S Language}.
Wadsworth & Brooks/Cole.
}
\section{Warning}{
The value of \code{.Last} is for the end user to control: as
it can be replaced later in the session, it cannot safely be used
programmatically, e.g.\sspace{}by a package. The other way to set code to be run
at the end of the session is to use a \emph{finalizer}: see
\code{\link{reg.finalizer}}.
}
\note{
The \code{R.app} GUI on macOS has its own version of these functions
with slightly different behaviour for the \code{save} argument (the
GUI's \sQuote{Startup} preferences for this action are taken into account).
}
\seealso{
\code{\link{.First}} for setting things on startup.
}
\examples{
\dontrun{## Unix-flavour example
.Last <- function() {
graphics.off() # close devices before printing
cat("Now sending PDF graphics to the printer:\n")
system("lpr Rplots.pdf")
cat("bye bye...\n")
}
quit("yes")}
}
\keyword{environment}