Re: [ROOT] Signal handlers and the like

From: Fons Rademakers (Fons.Rademakers@cern.ch)
Date: Sat Jan 10 2004 - 03:50:27 MET


Hi Matt,

 this is the list of signals that are handled by default by ROOT:

kSigChild
kSigBus
kSigSegmentationViolation
kSigIllegalInstruction
kSigSystem
kSigPipe
kSigAlarm
kSigUrgent
kSigFloatingException
kSigWindowChanged

The signals kSigBus, kSigSegmentationViolation, kSigIllegalInstruction
and kSigFloatingException cause the printing of the *** Break ***
message and make a long jump back to the ROOT prompt. No other custom
TSignalHandlers can be added to these signals.

The kSigAlarm signal handles a-sync timers.

The kSigWindowChanged signal handles terminal window resizing

The other signals have no other behaviour then that any registered
TSignalHandler::Notify()'s will be called.

When building in interactive application using the TRint object also the
kSigInterrupt signal will be handled (message: "*** Break *** keyboard
interrupt") plus long jump back to the ROOT command prompt. If no TRint
object is created there will be no kSigInterrupt handling.

All signals can be reset to their default Unix behaviour using the call
TSystem::ResetSignal(). All signals can be ignored using
TSystem::IgnoreSignal() (TSystem::IgnoreInterrupt() is a utility
function to toggle the handling of the interrupt signal. Typically
TSystem::IgnoreInterrupt()  is called to prevent a SIGINT to interrupt
some important call (like writing to ROOT file)).

If TRint is used and the default ROOT interrupt handler is not desired
use TApplication::GetSignalHandler() to get the interrupt handler and to
remove it using TSystem::RemoveSignalHandler().

Hope this is clear.

Cheers, Fons.


PS: in some cases ROOT ends up in a situation where ctrl-c does nothing
and one has to kill the ROOT session from another shell. This happens
when ROOT ends up in a situation where the SIGINT had been set to be
ignored. This is not desired and we are investigating the issue.



On Fri, 2004-01-09 at 13:56, Matt Palmer wrote:
> Hi,
> I'm using ROOT as a library for a set of external applications.  It 
> seems that ROOT automatically installs some signal handlers which I 
> would much rather it didn't do for these applications.  Is there any way 
> of stopping this behaviour?
> 
> Also, does ROOT install unexpected exception handlers or do other things 
> which may modify how programs they are linked to behave?
> 
> Thanks,
> Matt
-- 
Org:    CERN, European Laboratory for Particle Physics.
Mail:   1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
WWW:    http://www.rademakers.org/fons/      Fax:   +41 22 7679480



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET