2017-08-25 18:34:26 -04:00
|
|
|
! Copyright (C) 2011 Joe Groff.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2019-09-27 18:17:56 -04:00
|
|
|
USING: accessors assocs kernel math namespaces sequences threads ;
|
2011-11-08 13:15:44 -05:00
|
|
|
IN: unix.signals
|
|
|
|
|
2019-09-27 18:17:56 -04:00
|
|
|
CONSTANT: signal-names
|
|
|
|
{
|
|
|
|
"SIGHUP" "SIGINT" "SIGQUIT" "SIGILL" "SIGTRAP" "SIGABRT"
|
|
|
|
"SIGEMT" "SIGFPE" "SIGKILL" "SIGBUS" "SIGSEGV" "SIGSYS"
|
|
|
|
"SIGPIPE" "SIGALRM" "SIGTERM" "SIGURG" "SIGSTOP" "SIGTSIP"
|
|
|
|
"SIGCONT" "SIGCHLD" "SIGTTIN" "SIGTTOU" "SIGIO" "SIGXCPU"
|
|
|
|
"SIGXFSZ" "SIGVTALRM" "SIGPROF" "SIGWINCH" "SIGINFO"
|
|
|
|
"SIGUSR1" "SIGUSR2"
|
|
|
|
}
|
|
|
|
|
|
|
|
TUPLE: signal n ;
|
|
|
|
|
|
|
|
GENERIC: signal-name ( obj -- str/f )
|
|
|
|
|
|
|
|
M: signal signal-name n>> signal-name ;
|
|
|
|
|
|
|
|
M: integer signal-name ( n -- str/f ) 1 - signal-names ?nth ;
|
|
|
|
|
|
|
|
SYMBOL: dispatch-signal-hook
|
|
|
|
|
|
|
|
dispatch-signal-hook [ [ drop ] ] initialize
|
|
|
|
|
2011-11-08 13:15:44 -05:00
|
|
|
<PRIVATE
|
|
|
|
|
|
|
|
SYMBOL: signal-handlers
|
|
|
|
|
|
|
|
signal-handlers [ H{ } ] initialize
|
|
|
|
|
|
|
|
: dispatch-signal ( sig -- )
|
|
|
|
signal-handlers get-global at [ in-thread ] each ;
|
|
|
|
|
2011-11-09 02:12:10 -05:00
|
|
|
PRIVATE>
|
|
|
|
|
2011-11-08 13:15:44 -05:00
|
|
|
: add-signal-handler ( handler: ( -- ) sig -- )
|
|
|
|
signal-handlers get-global push-at ;
|
|
|
|
|
|
|
|
: remove-signal-handler ( handler sig -- )
|
|
|
|
signal-handlers get-global at [ remove! drop ] [ drop ] if* ;
|
|
|
|
|
|
|
|
[ dispatch-signal ] dispatch-signal-hook set-global
|