unix-2.7.2.2: POSIX functionality
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

System.Posix.Signals

Description

POSIX signal support

Synopsis

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.

data SignalInfo Source #

Information about a received signal (derived from siginfo_t ).

Since: 2.7.0.0

data SignalSpecificInfo Source #

Information specific to a particular type of signal (derived from siginfo_t ).

Since: 2.7.0.0

installHandler Source #

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

reservedSignals :: SignalSet Source #

A set of signals reserved for use by the implementation. In GHC, this will normally include either sigVTALRM or sigALRM .

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.