Kelly Robbins wrote:
> Tim,
> 
> This is exactly the example that I used.  I can get the program to run for
> a few iterations, and handle a few timeouts, but it eventually seg
> faults. :(
> 
> I'm including the output generated from print statements in my script.  It
> shows a few iterations, a few timeouts, then a seg fault.  I can get the
> signal to work, but the seg fault over time is what I'm concerned about.
> Any suggestions for this?
> 
> At CheckTNSPing
> At CheckDiskSpace
> Timeout while performing DiskSpace alert
> Sleeping for 5 seconds starting @ 2002/03/05 17:01:47.
> At CheckTNSPing
> At CheckDiskSpace
> At CheckSessionInfo
> At CheckInvalidRows
> At CheckPermissions
> Timeout while performing Permissions alert
> Sleeping for 5 seconds starting @ 2002/03/05 17:02:08.
> At CheckTNSPing
> At CheckDiskSpace
> Timeout while performing DiskSpace alert
> Sleeping for 5 seconds starting @ 2002/03/05 17:02:22.
> At CheckTNSPing
> At CheckDiskSpace
> At CheckSessionInfo
> At CheckInvalidRows
> At CheckPermissions
> At CheckMaxParameters
> At CheckObjectExtents
> Timeout while performing ObjectExtents alert
> Sleeping for 5 seconds starting @ 2002/03/05 17:02:43.
> At CheckTNSPing
> At CheckDiskSpace
> zsh: 11968 segmentation fault  /usr/local/bin/perl5
> /usr/vendor/oracle/UU-DBA/cr
> on/../bin/OracleMonitor  -s
> 
> 
> -----------------------------------------------------------------------------
> Kelly Robbins
> Database Administrator, Internet Computing Systems
> WorldCom
> 880 Technology Dr., Ann Arbor MI 48108
> E-mail: [EMAIL PROTECTED]
> Phone: (734) 214-5922
> Fax: (734) 214-7310
> ----------------------------------------------------------------------------
> 
> On Tue, 5 Mar 2002 [EMAIL PROTECTED] wrote:
> 
> 
>>Kelly,
>>
>>I think that what you want to achieve can be done with the alarm() function.
>>If you use it in an eval block, it won't kill the program. Here's a simple
>>example (from "Perl: The Complete Reference" by Martin Brown, pg 455):
>>
>>  print "Your name is? :\n";
>>  eval
>>   {
>>      local $SIG{ALRM} = sub { die "Timeout" };
>>      alarm(10);
>>      $name = <STDIN>;
>>      chomp $name;
>>      alarm 0;
>>   };
>>
>>   if ($@ and $@ =~ /Timeout/) { $name = 'Anonymous' }
>>   print "Hello $name!\n";
>>
>>alarm(10) sets the alarm for 10 seconds. alarm(0) turns it off. The special
>>variable $@ aka $EVAL_ERROR will be empty if the eval execute without error,
>>otherwise it holds the "die" message.
>>
>>There is also a good discussion of this stuff in the O'Reilly book
>>"Programming Perl".
>>
>>Hope this helps,
>>
>>Tim Helck
>>
>>-----Original Message-----
>>From: Kelly Robbins [mailto:[EMAIL PROTECTED]]
>>Sent: Tuesday, March 05, 2002 12:17 PM
>>To: [EMAIL PROTECTED]
>>Subject: Signal to timeout a long running query
>>
>>
>>
>>I'm trying to incorporate a signal in a database monitoring tool that we
>>have written which runs "forever".  I would like to be able to break out
>>of a long running query, but I would also like the script to continue
>>running.
>>
>>I have been successful writing a signal to quit a query that is running to
>>long, and the script will then continue, but the script eventually seg
>>faults over time.  Is there any way to prevent the seg faults?  If not, is
>>there a better way of imposing a timeout on my queries?
>>
>>Kelly
>>
>>
>>
> 

Kelly,

How much work is your signal handler doing? Lincoln mentions in "Network Programming 
with Perl" that 
sig handlers can cause segfaults if you do a lot of work in them. So if you are doing 
more than just 
calling die() or setting a global var in your sig handler that could be the problem. 
It might also 
matter which version of perl you are using.

Roger

-- 
There are lies, there are damned lies, and there are the power point presentations you 
make up to 
explain your code.

Reply via email to