On Mar 2, 2:30 am, [email protected] (Martin Evans) wrote:
> Lynn, Steve wrote:
> > All - I'm under Solaris using perl v. 5.8.3 and DBI v. 1.48. I can catch
> > signals w/o a problem before I connect to the database.
>
> > However after I connect, I can't catch signals anymore. If I comment out
> > the "DBI->connect" and press ctrl-c in a ReadLine(0), the signal is caught
> > fine.
>
> > I found one other issue that seemed similar
> > (http://www.mail-archive.com/[email protected]/msg07747.html).
>
> > Please help.
>
> > ###########################
>
> > #!/usr/local/perl -w
>
> > use strict;
>
> > use warnings;
>
> > use Term:ReadKey;
>
> > require DBI;
>
> > use sigtrap 'handler', \&SigExit, qw/HUP INT KILL/;
>
> > my $dbh;
>
> > my $response;
>
> > sub SigExit {
>
> > print STDOUT "\nTest\n";
>
> > die("\n");
>
> > }
>
> > $dbh =
> > DBI->connect("DBI:Oracle:host=dbserver;sid=mydb;port=1521","scott","tiger");
>
> > print "\nEnter a response: ";
>
> > $response = ReadLine(0);
>
> > print ""\nEnter another response: ";
>
> > $response = ReadLine(0);
>
> > ###########################
>
> > Thanks,
>
> > Steve
>
> Oracle client libraries can trap some signals (including HUP) depending
> on which ones you use and how you are connecting. I believe you will
> need to set up your handlers after connect for those signals but I
> cannot remember the down side in Oracle.
>
> There have been various posts on dbi-users about this in the past so an
> archive of dbi-users (some can be found at dbi.perl.org) would probably
> list them.
>
> Martin
> --
> Martin J. Evans
> Easysoft Limitedhttp://www.easysoft.com- Hide quoted text -
>
> - Show quoted text -
Thanks Martin.
I'm not sure whether I was clear enough on my goal. I'm trying to
trap INT signals so that when requesting input from the operator with
ReadLine, they can press ctrl-c and exit. I don't like the default
signal handling so I'd like to just do a die("\n") when an INT is
received.
When I comment out the DBI->connect, a ctrl-c will exit from the
ReadLine as intended. However, once the DBI->connect is completed,
and the operator presses ctrl-c within the ReadLine, '^C' appears, but
the signal handler isn't called. It looks like the DBI->connect
cancels, disables or overrides my sigtrap.
I'm not trying to handle any signals from within DBI. I just trying
to handle INT from within ReadLine. It seems like DBI->connect is
canceling my signal handler.
I tried to reload sigtrap immediately after the DBI->connect but that
didn't work either:
#!/usr/local/perl -w
use strict;
use warnings;
use Term:ReadKey;
require DBI;
use sigtrap 'handler', \&SigExit, qw/HUP INT KILL/;
my $dbh;
my $response;
sub SigExit {
print STDOUT "\nTest\n";
die("\n");
}
$dbh = DBI-
>connect("DBI:Oracle:host=dbserver;sid=mydb;port=1521","scott","tiger");
use sigtrap 'handler', \&SigExit, qw/HUP INT KILL/;
print "\nEnter a response: ";
$response = ReadLine(0);
print ""\nEnter another response: ";
$response = ReadLine(0);
##################################
Any help would be appreciated,
Steve Lynn