[gambit-list] Defining signal handlers

Sascha Ziemann ceving at gmail.com
Mon Dec 19 15:59:22 EST 2011


I was searching for a way to define signal handlers. I found a description here:

https://mercure.iro.umontreal.ca/pipermail/gambit-list/2006-January/000529.html

which is also in examples/misc/signals.scm. It works by calling

     ___EXT(___raise_interrupt) (___INTR_6);

in the C signal handler and registering an corresponding function in Scheme:

   (##interrupt-vector-set! 6 (lambda () (println 'got-SIGUSR1)))

Is this still the preferred way to install signal handlers?

And if so how are the numbers chosen for the call to ##interrupt-vector-set!?

I found the definition in lib/_kernel.scm:

(define ##interrupt-vector
  (##vector #f #f #f #f #f #f #f #f))

(define-prim (##interrupt-vector-set! code handler)
  (##declare (not interrupts-enabled))
  (##vector-set! ##interrupt-vector code handler))

It seems to me that 7 is the last interrupt one can use. If I use 6
and 7 for USR1 and USR2 how can I set a handler for SIGHUP, SIGTERM,
SIGQUIT, SIGPWR and SIGIO?



More information about the Gambit-list mailing list