unix-2.4.1.0: POSIX functionality

Portabilitynon-portable (requires POSIX)
Stabilityprovisional
Maintainerlibraries@haskell.org

System.Posix.Signals

Contents

Description

POSIX signal support

Synopsis

The Signal type

type Signal = CInt

Specific signals

Sending signals

raiseSignal :: Signal -> IO ()

raiseSignal int calls kill to signal the current process with interrupt signal int.

signalProcess :: Signal -> ProcessID -> IO ()

signalProcess int pid calls kill to signal process pid with interrupt signal int.

signalProcessGroup :: Signal -> ProcessGroupID -> IO ()

signalProcessGroup int pgid calls kill to signal all processes in group pgid with interrupt signal int.

Handling signals

data Handler

The actions to perform when a signal is received.

Constructors

Default 
Ignore 
Catch (IO ()) 
CatchOnce (IO ()) 

Instances

installHandler

Arguments

:: Signal 
-> Handler 
-> Maybe SignalSet

other signals to block

-> IO Handler

old handler

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

data SignalSet

The process signal mask

getSignalMask :: IO SignalSet

getSignalMask calls sigprocmask to determine the set of interrupts which are currently being blocked.

setSignalMask :: SignalSet -> IO ()

setSignalMask mask calls sigprocmask with SIG_SETMASK to block all interrupts in mask.

blockSignals :: SignalSet -> IO ()

blockSignals mask calls sigprocmask with SIG_BLOCK to add all interrupts in mask to the set of blocked interrupts.

unblockSignals :: SignalSet -> IO ()

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

scheduleAlarm i calls alarm to schedule a real time alarm at least i seconds in the future.

Waiting for signals

getPendingSignals :: IO SignalSet

getPendingSignals calls sigpending to obtain the set of interrupts which have been received but are currently blocked.

awaitSignal :: Maybe SignalSet -> IO ()

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 pause. awaitSignal returns on receipt of a signal. 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

Tells the system whether or not to set the SA_NOCLDSTOP flag when installing new signal handlers.

queryStoppedChildFlag :: IO Bool

Queries the current state of the stopped child flag.