See the ECLiPSe User Manual for details on the operation of interrupt handlers.
The interrupt handlers of the following interrupts cannot be modified, since they cannot be caught by ECLiPSe .
No. Code Description Example
9 SIGKILL kill kill process from keyboard
17 SIGSTOP stop cannot be caught, blocked, ignored
The interrupts which can be caught or trapped are implementation
defined.
The following interrupt handlers have a special meaning and can be used even with the embedded library version of Eclipse:
Handler Meaning
------- -------
true/0 ignore the interrupt (SIG_IGN).
default/0 take the default operating system action when the
interrupt occurs (SIG_DFL).
event/1 handle the signal by posting a (synchronous) event. The
symbolic name of the interrupt will be used as the event name.
throw/1 invoke exit_block/1 with the interrupt's symbolic name.
abort/0 invoke exit_block(abort)
halt/0 halt Eclipse and terminate the process
internal/0 the signal is used by Eclipse to implement internal
functionality (e.g. profiler)
All other handler specifications cause the specified predicate to
be called in a nested invocation of the Eclipse engine. This is
not supported on some hardware/OS platforms, e.g. Windows.
Success:
?- get_interrupt_handler(alrm,M,N).
M = event / 1
N = sepia_kernel
yes.
?- set_interrupt_handler(alrm,true/0), interrupt(alrm).
yes.
?- kill(0, alrm).
yes.
?- get_interrupt_handler(alrm,M,N).
M = true / 0
N = sepia_kernel
yes.
?- [user].
a :- write(log_output, "interrupt 16"), fail.
user compiled 136 bytes in 0.00 seconds
?- set_interrupt_handler(16,a/0).
yes.
?- kill(0, 16).
interrupt 16
yes.
Error:
set_interrupt_handler(N,true/0). (Error 4).
set_interrupt_handler(15,P). (Error 4).
set_interrupt_handler(15.0,true/0). (Error 5).
set_interrupt_handler(1000,X). (Error 6).
set_interrupt_handler(-1,X). (Error 6).
set_interrupt_handler(6,a/4). (Error 6). % arity > 3.
set_interrupt_handler(6,t/2). (Error 60). % no t/2.
set_interrupt_handler(9,true/0). (Error 170).
set_interrupt_handler(17,true/0). (Error 170).