EXCEPTION(2) EXCEPTION(2)
NAME
exception - obtain data about exceptions and set exception-
handling modes
SYNOPSIS
include "exception.m";
exc := load Exception Exception->PATH;
NOTIFYLEADER, PROPAGATE: con iota;
getexc: fn(pid: int): (int, string, string);
setexcmode: fn(mode: int): int;
DESCRIPTION
Exception provides functions to fetch data about exceptions
in other processes and change exception-handling modes. It
encapsulates exception-related operations on files in
prog(3).
When a process incurs an exception, the system saves details
before processing the exception, following Limbo's rules.
Getexc returns a tuple (pc, module, description) that
describes the most recent exception raised in process pid.
(A process id of -1 is taken to mean the current process.)
The tuple contains the pc value, the module name, and the
exception name. The value (0, nil, nil) is returned if no
exception has occurred.
By default, when a process incurs an exception that is not
handled — no exception clause matches that exception — the
process is stopped in a `Broken' state for debugging, and
the exception does not propagate further. Setexcmode
changes the way that the system handles exceptions for the
current process and those it later spawns. A mode of
NOTIFYLEADER makes the invoking process the leader of the
current process group for exception handling. Subsequently,
an exception in any process in the current process group
will atomically destroy all processes in the group except
the leader, and the exception will be raised in the leader.
(This works even when the leader itself incurs the excep-
tion.) A mode of PROPAGATE instead causes an exception in
any process in the group to be raised in all processes in
the group, allowing them all to initiate local error recov-
ery (ie, within each process).
SOURCE
/appl/lib/exception.b
DIAGNOSTICS
Both functions return -1 on error and set the system error
Page 1 Plan 9 (printed 10/28/25)
EXCEPTION(2) EXCEPTION(2)
string.
SEE ALSO
prog(3)
Page 2 Plan 9 (printed 10/28/25)