Next: cpg-ref-SP_strdup, Previous: cpg-ref-SP_set_user_stream_post_hook, Up: cpg-bif [Contents][Index]
SP_signal()#include <sicstus/sicstus.h>
typedef void
SP_SigFun (int sig, void *user_data);
SP_SigFun
SP_signal(int sig,
SP_SigFun fun, void *user_data);
Installs a function fun as a handler for the signal
sig.
It will be called with sig and user_data as arguments.
The signal
The function
An extra, user defined value passed to the function.
SP_SIG_ERR if an error occurs error. On success,
some value different from SP_SIG_ERR.
When the OS delivers a signal sig for which
SP_signal(sig,func,…) has been called, SICStus will not call
func immediately. Instead the call to func will be delayed
until it is safe for Prolog to do so, in much the same way that functions
installed by SP_event() are handled.
Since the signal handling function func will not be called
immediately upon delivery of the signal to the process it only makes
sense to use SP_signal() to handle certain asynchronous signals
such as SIGINT, SIGUSR1, SIGUSR2. Other
asynchronous signals handled specially by the OS, such as SIGCHLD
are not suitable for handling via SP_signal(). Note that the
development system installs a handler for ‘SIGINT’, and, under
Windows, ‘SIGBREAK’, to catch keyboard interrupts.
As of release 4.4, library(timeout) no longer uses any signals.
When func is called it may only call other (non SICStus) C code
and SP_event(). Note that func will be called in the main
thread.
If fun is one of the special constants SP_SIG_IGN or
SP_SIG_DFL, then one of two things happens:
sig has already been installed with SP_signal(), then the
SICStus OS-level signal handler is removed and replaced with,
respectively, SIG_IGN or SIG_DFL.
SP_signal(), then SP_signal() does
nothing and returns SP_SIG_ERR.
A signal handler installed by a foreign resource should be
uninstalled in the deinit function for the foreign
resource. This is to prevent the handler in the foreign resource
from being called after the code of the foreign resource has been
unloaded (e.g. by unload_foreign_resource/1).
Note that SP_signal() is not suitable for installing
signal handlers for synchronous signals like SIGSEGV.
SP_event(), Signal Handling.