Copyright | (c) The University of Glasgow 2002 |
---|---|
License | BSD-style (see the file libraries/base/LICENSE) |
Maintainer | libraries@haskell.org |
Stability | provisional |
Portability | non-portable (requires POSIX) |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
POSIX signal support
Synopsis
- type Signal = CInt
- nullSignal :: Signal
- internalAbort :: Signal
- sigABRT :: CInt
- realTimeAlarm :: Signal
- sigALRM :: CInt
- busError :: Signal
- sigBUS :: CInt
- processStatusChanged :: Signal
- sigCHLD :: CInt
- continueProcess :: Signal
- sigCONT :: CInt
- floatingPointException :: Signal
- sigFPE :: CInt
- lostConnection :: Signal
- sigHUP :: CInt
- illegalInstruction :: Signal
- sigILL :: CInt
- keyboardSignal :: Signal
- sigINT :: CInt
- killProcess :: Signal
- sigKILL :: CInt
- openEndedPipe :: Signal
- sigPIPE :: CInt
- keyboardTermination :: Signal
- sigQUIT :: CInt
- segmentationViolation :: Signal
- sigSEGV :: CInt
- softwareStop :: Signal
- sigSTOP :: CInt
- softwareTermination :: Signal
- sigTERM :: CInt
- keyboardStop :: Signal
- sigTSTP :: CInt
- backgroundRead :: Signal
- sigTTIN :: CInt
- backgroundWrite :: Signal
- sigTTOU :: CInt
- userDefinedSignal1 :: Signal
- sigUSR1 :: CInt
- userDefinedSignal2 :: Signal
- sigUSR2 :: CInt
- profilingTimerExpired :: Signal
- sigPROF :: CInt
- badSystemCall :: Signal
- sigSYS :: CInt
- breakpointTrap :: Signal
- sigTRAP :: CInt
- urgentDataAvailable :: Signal
- sigURG :: CInt
- virtualTimerExpired :: Signal
- sigVTALRM :: CInt
- cpuTimeLimitExceeded :: Signal
- sigXCPU :: CInt
- fileSizeLimitExceeded :: Signal
- sigXFSZ :: CInt
- raiseSignal :: Signal -> IO ()
- signalProcess :: Signal -> ProcessID -> IO ()
- signalProcessGroup :: Signal -> ProcessGroupID -> IO ()
- data Handler
- = Default
- | Ignore
- | Catch (IO ())
- | CatchOnce (IO ())
- | CatchInfo (SignalInfo -> IO ())
- | CatchInfoOnce (SignalInfo -> IO ())
- data SignalInfo = SignalInfo {}
- data SignalSpecificInfo
- installHandler :: Signal -> Handler -> Maybe SignalSet -> IO Handler
- data SignalSet
- emptySignalSet :: SignalSet
- fullSignalSet :: SignalSet
- reservedSignals :: SignalSet
- addSignal :: Signal -> SignalSet -> SignalSet
- deleteSignal :: Signal -> SignalSet -> SignalSet
- inSignalSet :: Signal -> SignalSet -> Bool
- getSignalMask :: IO SignalSet
- setSignalMask :: SignalSet -> IO ()
- blockSignals :: SignalSet -> IO ()
- unblockSignals :: SignalSet -> IO ()
- scheduleAlarm :: Int -> IO Int
- getPendingSignals :: IO SignalSet
- awaitSignal :: Maybe SignalSet -> IO ()
- setStoppedChildFlag :: Bool -> IO Bool
- queryStoppedChildFlag :: IO Bool
The Signal type
Specific signals
nullSignal :: Signal Source #
internalAbort :: Signal Source #
Alias for sigABRT
.
realTimeAlarm :: Signal Source #
Alias for sigALRM
.
processStatusChanged :: Signal Source #
Alias for sigCHLD
.
continueProcess :: Signal Source #
Alias for sigCONT
.
floatingPointException :: Signal Source #
Alias for sigFPE
.
lostConnection :: Signal Source #
Alias for sigHUP
.
illegalInstruction :: Signal Source #
Alias for sigILL
.
keyboardSignal :: Signal Source #
Alias for sigINT
.
killProcess :: Signal Source #
Alias for sigKILL
.
openEndedPipe :: Signal Source #
Alias for sigPIPE
.
keyboardTermination :: Signal Source #
Alias for sigQUIT
.
segmentationViolation :: Signal Source #
Alias for sigSEGV
.
softwareStop :: Signal Source #
Alias for sigSTOP
.
softwareTermination :: Signal Source #
Alias for sigTERM
.
keyboardStop :: Signal Source #
Alias for sigTSTP
.
backgroundRead :: Signal Source #
Alias for sigTTIN
.
backgroundWrite :: Signal Source #
Alias for sigTTOU
.
userDefinedSignal1 :: Signal Source #
Alias for sigUSR1
.
userDefinedSignal2 :: Signal Source #
Alias for sigUSR2
.
profilingTimerExpired :: Signal Source #
Alias for sigPROF
.
badSystemCall :: Signal Source #
Alias for sigSYS
.
breakpointTrap :: Signal Source #
Alias for sigTRAP
.
urgentDataAvailable :: Signal Source #
Alias for sigURG
.
virtualTimerExpired :: Signal Source #
Alias for sigVTALRM
.
cpuTimeLimitExceeded :: Signal Source #
Alias for sigXCPU
.
fileSizeLimitExceeded :: Signal Source #
Alias for sigXFSZ
.
Sending signals
raiseSignal :: Signal -> IO () Source #
raiseSignal int
calls kill
to signal the current process
with interrupt signal int
.
signalProcess :: Signal -> ProcessID -> IO () Source #
signalProcess int pid
calls kill
to signal process pid
with interrupt signal int
.
signalProcessGroup :: Signal -> ProcessGroupID -> IO () Source #
signalProcessGroup int pgid
calls kill
to signal
all processes in group pgid
with interrupt signal int
.
Handling signals
The actions to perform when a signal is received.
Default | Sets the disposition of the signal to |
Ignore | Set the disposition of the signal to |
Catch (IO ()) | signal handler is not reset |
CatchOnce (IO ()) | signal handler is automatically reset (via |
CatchInfo (SignalInfo -> IO ()) | Since: unix-2.7.0.0 |
CatchInfoOnce (SignalInfo -> IO ()) | Since: unix-2.7.0.0 |
data SignalInfo Source #
Information about a received signal (derived from siginfo_t
).
Since: unix-2.7.0.0
data SignalSpecificInfo Source #
Information specific to a particular type of signal
(derived from siginfo_t
).
Since: unix-2.7.0.0
installHandler int handler iset
calls sigaction
to install an
interrupt handler for signal int
. If handler
is Default
,
SIG_DFL
is installed; if handler
is Ignore
, SIG_IGN
is
installed; if handler
is Catch action
, a handler is installed
which will invoke action
in a new thread when (or shortly after) the
signal is received.
If iset
is Just s
, then the sa_mask
of the sigaction
structure
is set to s
; otherwise it is cleared. The previously installed
signal handler for int
is returned
Signal sets
The process signal mask
getSignalMask :: IO SignalSet Source #
getSignalMask
calls sigprocmask
to determine the
set of interrupts which are currently being blocked.
setSignalMask :: SignalSet -> IO () Source #
setSignalMask mask
calls sigprocmask
with
SIG_SETMASK
to block all interrupts in mask
.
blockSignals :: SignalSet -> IO () Source #
blockSignals mask
calls sigprocmask
with
SIG_BLOCK
to add all interrupts in mask
to the
set of blocked interrupts.
unblockSignals :: SignalSet -> IO () Source #
unblockSignals mask
calls sigprocmask
with
SIG_UNBLOCK
to remove all interrupts in mask
from the
set of blocked interrupts.
The alarm timer
scheduleAlarm :: Int -> IO Int Source #
scheduleAlarm i
calls alarm
to schedule a real time
alarm at least i
seconds in the future.
Waiting for signals
getPendingSignals :: IO SignalSet Source #
getPendingSignals
calls sigpending
to obtain
the set of interrupts which have been received but are currently blocked.
awaitSignal :: Maybe SignalSet -> IO () Source #
awaitSignal iset
suspends execution until an interrupt is received.
If iset
is Just s
, awaitSignal
calls sigsuspend
, installing
s
as the new signal mask before suspending execution; otherwise, it
calls sigsuspend
with current signal mask. Note that RTS
scheduler signal (either virtualTimerExpired
or realTimeAlarm
)
could cause premature termination of this call. It might be necessary to block that
signal before invocation of awaitSignal
with blockSignals
reservedSignals
.
awaitSignal
returns when signal was received and processed by a
signal handler, or if the signal could not be caught. If you have
installed any signal handlers with installHandler
, it may be wise
to call yield
directly after awaitSignal
to ensure that the
signal handler runs as promptly as possible.
The NOCLDSTOP
flag
setStoppedChildFlag :: Bool -> IO Bool Source #
Tells the system whether or not to set the SA_NOCLDSTOP
flag when
installing new signal handlers.
queryStoppedChildFlag :: IO Bool Source #
Queries the current state of the stopped child flag.