In 3.0.9 and current ‘main’, I get this: --8<---------------cut here---------------start------------->8--- $ cat sigaction-fork.scm (use-modules (ice-9 match))
;; This call spawns the signal delivery thread as a side effect. (sigaction SIGALRM (lambda (signal) (pk 'got-signal! signal))) (match (primitive-fork) (0 (pk 'child (getpid)) (sigaction SIGALRM (lambda (signal) ;; This handler is never called! (pk 'got-signal-child! signal))) (kill 0 SIGALRM) (pk 'alarm-sent)) (_ (primitive-exit 0))) $ guile sigaction-fork.scm ;;; (child 30308) ;;; (alarm-sent) --8<---------------cut here---------------end--------------->8--- Everything works fine if we remove the pre-fork ‘sigaction’ call. Ludo’.