1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
module Process.Signal (
Signal(..),
signalBuiltins,
signalProcess,
) where
import Control.Monad.IO.Class
import Data.Text (Text)
import Data.Text qualified as T
import Script.Expr
import System.Posix qualified as Posix
newtype Signal = Signal Posix.Signal
deriving (Eq, Ord)
instance ExprType Signal where
textExprType _ = "Signal"
textExprValue (Signal sig)
| sig == Posix.sigHUP = "SIGHUP"
| sig == Posix.sigINT = "SIGINT"
| sig == Posix.sigQUIT = "SIGQUIT"
| sig == Posix.sigILL = "SIGILL"
| sig == Posix.sigTRAP = "SIGTRAP"
| sig == Posix.sigABRT = "SIGABRT"
| sig == Posix.sigBUS = "SIGBUS"
| sig == Posix.sigFPE = "SIGFPE"
| sig == Posix.sigKILL = "SIGKILL"
| sig == Posix.sigUSR1 = "SIGUSR1"
| sig == Posix.sigSEGV = "SIGSEGV"
| sig == Posix.sigUSR2 = "SIGUSR2"
| sig == Posix.sigPIPE = "SIGPIPE"
| sig == Posix.sigALRM = "SIGALRM"
| sig == Posix.sigTERM = "SIGTERM"
| sig == Posix.sigCHLD = "SIGCHLD"
| sig == Posix.sigCONT = "SIGCONT"
| sig == Posix.sigSTOP = "SIGSTOP"
| sig == Posix.sigTSTP = "SIGTSTP"
| sig == Posix.sigTTIN = "SIGTTIN"
| sig == Posix.sigTTOU = "SIGTTOU"
| sig == Posix.sigURG = "SIGURG"
| sig == Posix.sigXCPU = "SIGXCPU"
| sig == Posix.sigXFSZ = "SIGXFSZ"
| sig == Posix.sigVTALRM = "SIGVTALRM"
| sig == Posix.sigPROF = "SIGPROF"
| sig == Posix.sigPOLL = "SIGPOLL"
| sig == Posix.sigSYS = "SIGSYS"
| otherwise = "<SIG_" <> T.pack (show sig) <> ">"
signalBuiltins :: [ ( Text, SomeVarValue ) ]
signalBuiltins = map (fmap someConstValue)
[ ( "SIGHUP", Signal Posix.sigHUP )
, ( "SIGINT", Signal Posix.sigINT )
, ( "SIGQUIT", Signal Posix.sigQUIT )
, ( "SIGILL", Signal Posix.sigILL )
, ( "SIGTRAP", Signal Posix.sigTRAP )
, ( "SIGABRT", Signal Posix.sigABRT )
, ( "SIGBUS", Signal Posix.sigBUS )
, ( "SIGFPE", Signal Posix.sigFPE )
, ( "SIGKILL", Signal Posix.sigKILL )
, ( "SIGUSR1", Signal Posix.sigUSR1 )
, ( "SIGSEGV", Signal Posix.sigSEGV )
, ( "SIGUSR2", Signal Posix.sigUSR2 )
, ( "SIGPIPE", Signal Posix.sigPIPE )
, ( "SIGALRM", Signal Posix.sigALRM )
, ( "SIGTERM", Signal Posix.sigTERM )
, ( "SIGCHLD", Signal Posix.sigCHLD )
, ( "SIGCONT", Signal Posix.sigCONT )
, ( "SIGSTOP", Signal Posix.sigSTOP )
, ( "SIGTSTP", Signal Posix.sigTSTP )
, ( "SIGTTIN", Signal Posix.sigTTIN )
, ( "SIGTTOU", Signal Posix.sigTTOU )
, ( "SIGURG", Signal Posix.sigURG )
, ( "SIGXCPU", Signal Posix.sigXCPU )
, ( "SIGXFSZ", Signal Posix.sigXFSZ )
, ( "SIGVTALRM", Signal Posix.sigVTALRM )
, ( "SIGPROF", Signal Posix.sigPROF )
, ( "SIGPOLL", Signal Posix.sigPOLL )
, ( "SIGSYS", Signal Posix.sigSYS )
]
signalProcess :: MonadIO m => Signal -> Posix.ProcessID -> m ()
signalProcess (Signal sig) pid = liftIO $ Posix.signalProcess sig pid
|