next up previous contents index
Next: Examples of Signal Handlers Up: Unix Interrupts Previous: Unix Interrupts   Contents   Index


Changing Interrupt Handlers

[Macro]
system: with-enabled-interrupts
specs &rest body

This macro should be called with a list of signal specifications, specs. Each element of specs should be a list of two or three elements: the first should be the Unix signal for which a handler should be established, the second should be a function to be called when the signal is received, and the third should be an optional character used to generate the signal from the keyboard. This last item is only useful for the SIGINT, SIGQUIT, and SIGTSTP signals. One or more signal handlers can be established in this way. with-enabled-interrupts establishes the correct signal handlers and then executes the forms in body. The forms are executed in an unwind-protect so that the state of the signal handlers will be restored to what it was before the with-enabled-interrupts was entered. A signal handler function specified as NIL will set the Unix signal handler to the default which is normally either to ignore the signal or to cause a core dump depending on the particular signal.

[Macro]
system: without-interrupts
&rest body

It is sometimes necessary to execute a piece a code that can not be interrupted. This macro the forms in body with interrupts disabled. Note that the Unix interrupts are not actually disabled, rather they are queued until after body has finished executing.

[Macro]
system: with-interrupts
&rest body

When executing an interrupt handler, the system disables interrupts, as if the handler was wrapped in in a without-interrupts. The macro with-interrupts can be used to enable interrupts while the forms in body are evaluated. This is useful if body is going to enter a break loop or do some long computation that might need to be interrupted.

[Macro]
system: without-hemlock
&rest body

For some interrupts, such as SIGTSTP (suspend the Lisp process and return to the Unix shell) it is necessary to leave Hemlock and then return to it. This macro executes the forms in body after exiting Hemlock. When body has been executed, control is returned to Hemlock.

[Function]
system: enable-interrupt
signal function &optional character

This function establishes function as the handler for signal. The optional character can be specified for the SIGINT, SIGQUIT, and SIGTSTP signals and causes that character to generate the appropriate signal from the keyboard. Unless you want to establish a global signal handler, you should use the macro with-enabled-interrupts to temporarily establish a signal handler. Without character, enable-interrupt returns the old function associated with the signal. When character is specified for SIGINT, SIGQUIT, or SIGTSTP, it returns the old character code.

[Function]
system: ignore-interrupt
signal

Ignore-interrupt sets the Unix signal mechanism to ignore signal which means that the Lisp process will never see the signal. Ignore-interrupt returns the old function associated with the signal or nil if none is currently defined.

[Function]
system: default-interrupt
signal

Default-interrupt can be used to tell the Unix signal mechanism to perform the default action for signal. For details on what the default action for a signal is, see section 2 of the Unix Programmer's Manual. In general, it is likely to ignore the signal or to cause a core dump.


next up previous contents index
Next: Examples of Signal Handlers Up: Unix Interrupts Previous: Unix Interrupts   Contents   Index
Peter Van Eynde 2001-03-08