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, ignoredThe 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: [eclipse]: get_interrupt_handler(alrm,M,N). M = event / 1 N = sepia_kernel yes. [eclipse]: set_interrupt_handler(alrm,true/0), interrupt(alrm). yes. [eclipse]: kill(0, alrm). yes. [eclipse]: get_interrupt_handler(alrm,M,N). M = true / 0 N = sepia_kernel yes. [eclipse]: [user]. a :- write(log_output, "interrupt 16"), fail. user compiled 136 bytes in 0.00 seconds [eclipse]: set_interrupt_handler(16,a/0). yes. [eclipse]: 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).