unix- POSIX functionality

Portabilitynon-portable (requires POSIX)




POSIX signal support


The Signal type

Specific signals

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

data Handler Source

The actions to perform when a signal is received.


Catch (IO ()) 
CatchOnce (IO ()) 




:: 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

The process signal mask

getSignalMask :: IO SignalSetSource

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 IntSource

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

Waiting for signals

getPendingSignals :: IO SignalSetSource

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 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.


setStoppedChildFlag :: Bool -> IO BoolSource

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

queryStoppedChildFlag :: IO BoolSource

Queries the current state of the stopped child flag.