Sponsored Content
Top Forums Programming Perl: trap signal 'exit': why I am not able to have it work?? Post 303006276 by alex_5161 on Monday 30th of October 2017 06:14:35 PM
Old 10-30-2017
Perl: trap signal 'exit': why I am not able to have it work??

First time trying to work with signals in Perl.
Reviewing example I try it, but not able to get it work for 'exit'.
I hope, I am correct, assuming, that the ending any code by
Code:
exit $return_code;

the $SIG{EXIT} should be de-referenced and processed?!
So, I have such code, that, I assume, should, but does not process signal handling:
Code:
#!/bin/perl
sub trp_h{
  print "\nIn 'trp_h()'. ".
       "\nReceived parameters \@_: ".(join ", ",@_).
       "\n\$! as a number: ".($!+0).", as a string: ".(" ".$!).
       "\n now 'sleep 5' before return.";
  sleep 5;
}
$SIG{EXIT}='trp_h';
print "\nSet handler: $SIG{EXIT}\n";
exit(5);
print "after first exit";

$SIG{EXIT}=\&trp_h;
print "\nSet handler to code: $SIG{EXIT}\n";
exit(3);
print "after second exit\n";

print "Restoring to default\n";
$SIG{EXIT}='DEFAULT';
exit(2);
exit 1;

Please, help me understand what is wrong or,
if I mistaken on assumption that the 'exit()' is processed by the $SIG{EXIT}, how it could be handled to process activity, such as in UNIX 'trap "..." EXIT' command?

Thanks!
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Fmli Signal/trap

Does anyone know how to program signals in fmli? My fmli script goes in loop when the telnet session is closed. When I start the script from the prompt the issue do not happen. But when it is started by the login process it hags. That's why I want to program the SIGHUP to exit/finish the script.... (0 Replies)
Discussion started by: Marcos Brito
0 Replies

2. Shell Programming and Scripting

how to trap unix signal if the process killed/interupt occured in bash...

hey champs, I have a process running.......i have to catch/trap the signal when the process is being interupted/killed (kill -9 pid) option...... how can i achieve the same thru my process........ let my process is a.sh and it supposed to take 13 mins to complete, but due to some problem ,... (15 Replies)
Discussion started by: manas_ranjan
15 Replies

3. Shell Programming and Scripting

trap signal for enter key

hi , What is the trap signal for "ENTER key"? (4 Replies)
Discussion started by: Sreejith_VK
4 Replies

4. Shell Programming and Scripting

Getting exit status of child in trap handler

Hi, I have a trap problem when calling a child script in the background. I know there are a lot of threads here on the issue of traps and signals, I think I have read all the relevant ones, but still haven't found an answer to my problem. I'm working on Linux or HP, the script as you can see... (4 Replies)
Discussion started by: rimon
4 Replies

5. UNIX for Dummies Questions & Answers

trap signal on user logout ?

hi all , I want to execute a script on the user logout(using gnome environment). Is ther any way to execute it through TRAP stmt? (2 Replies)
Discussion started by: harsha10
2 Replies

6. Shell Programming and Scripting

How to Trap kill -9 signal

I just want to trap kill -9 signal issued by any of user from any terminal and just capture that user terminal who had raised this kill -9 command (1 Reply)
Discussion started by: puneet.goel
1 Replies

7. Shell Programming and Scripting

Record the Signal Type or Number in Bash Trap function

In my Bash script I have an exit/cleanup function in a trap statement like: trap exitCleanup 1 2 3 6 15 25 Is there anyway to capture which signal # has occurred to record in a log file. Please note I am trying to avoid something like: trap 'mySignal=1; exitCleanup' 1 trap... (1 Reply)
Discussion started by: ckmehta
1 Replies

8. Shell Programming and Scripting

How trap a signal in shell script?

Hi , i have a scenario where...i have to put a check where if script is executing more than 15mins i have to kill that script and n retry again 2nd time. i this case i can use background process to do it but i feel trap will be the efficent way to do so... but i dont know much about it... (1 Reply)
Discussion started by: crackthehit007
1 Replies

9. Shell Programming and Scripting

Quiting running process without catching TRAP signal

Hi, I would like to ask, if is it possible to quit running loop in the script any other way than catching the trap signal. Ctrl-C ends only current running instance of process but not whole script. Any clues? (3 Replies)
Discussion started by: smoofy
3 Replies

10. Homework & Coursework Questions

VM trap may work differently than a pure install trap.

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: That is the last reply I received from my instructor, and I'm looking for some alternatives. When using... (2 Replies)
Discussion started by: newuser45
2 Replies
Net::Server::SIG(3)					User Contributed Perl Documentation				       Net::Server::SIG(3)

NAME
Net::Server::SIG - adpf - Safer signal handling SYNOPSIS
use Net::Server::SIG qw(register_sig check_sigs); use IO::Select (); use POSIX qw(WNOHANG); my $select = IO::Select->new(); register_sig(PIPE => 'IGNORE', HUP => 'DEFAULT', USR1 => sub { print "I got a SIG $_[0] "; }, USR2 => sub { print "I got a SIG $_[0] "; }, CHLD => sub { 1 while waitpid(-1, WNOHANG) > 0; }, ); # add some handles to the select $select->add(*STDIN); # loop forever trying to stay alive while(1) { # do a timeout to see if any signals got passed us # while we were processing another signal my @fh = $select->can_read(10); my $key; my $val; # this is the handler for safe (fine under unsafe also) if (check_sigs()) { # or my @sigs = check_sigs(); next unless @fh; } my $handle = $fh[@fh]; # do something with the handle } DESCRIPTION
Signals prior in Perl prior to 5.7 were unsafe. Since then signals have been implemented in a more safe algorithm. Net::Server::SIG provides backwards compatibility, while still working reliably with newer releases. Using a property of the select() function, Net::Server::SIG attempts to fix the unsafe problem. If a process is blocking on select() any signal will short circuit the select. Using this concept, Net::Server::SIG does the least work possible (changing one bit from 0 to 1). And depends upon the actual processing of the signals to take place immediately after the the select call via the "check_sigs" function. See the example shown above and also see the sigtest.pl script located in the examples directory of this distribution. FUNCTIONS
"register_sig($SIG => &code_ref)" Takes key/value pairs where the key is the signal name, and the argument is either a code ref, or the words 'DEFAULT' or 'IGNORE'. The function register_sig must be used in conjuction with check_sigs, and with a blocking select() function call -- otherwise, you will observe the registered signal mysteriously vanish. "unregister_sig($SIG)" Takes the name of a signal as an argument. Calls register_sig with a this signal name and 'DEFAULT' as arguments (same as register_sig(SIG,'DEFAULT') "check_sigs()" Checks to see if any registered signals have occured. If so, it will play the registered code ref for that signal. Return value is array containing any SIGNAL names that had occured. "sig_is_registered($SIG)" Takes a signal name and returns any registered code_ref for that signal. AUTHORS
Paul Seamons (paul@seamons.com) Rob B Brown (rob@roobik.com) - Provided a sounding board and feedback in creating Net::Server::SIG and sigtest.pl. LICENSE
This package may be distributed under the terms of either the GNU General Public License or the Perl Artistic License All rights reserved. perl v5.16.2 2012-05-29 Net::Server::SIG(3)
All times are GMT -4. The time now is 07:32 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy