[comp.lang.perl] catching signals for cleanup

mike@e53.austin.ibm.com (Michael McClung) (06/25/91)

I'm having trouble defining a cleanup function in perl.  In ksh I'd use

    trap 'Cleanup' EXIT HUP INT QUIT TERM

I thought the equivalent in perl would be something like

    %SIG = ('EXIT','cleanup','HUP','cleanup','INT','cleanup',
            'QUIT','cleanup','TERM','cleanup');

But the perl didn't call cleanup on exit .  I tried the following 
simple test to see if any signals were being caught.

    sub cleanup { print "In cleanup\n"; }
    $SIG{'INT'} = 'cleanup';
    kill 'INT', $$;

This did work.  When I tried the same test with EXIT, the kill command
gave an error (Unrecognized signal name "EXIT").  IT also didn't work
when I used '0' in place of EXIT.

So anyway, I'm confused.  What are the recognized signals in perl?  
Can an EXIT signal be caught in perl?  I'm aware of the eval approach 
(page 138 in the camel book) of defining a cleanup routine but I thought
using a signal was cleaner.  Help would be appreciated.

tchrist@convex.COM (Tom Christiansen) (06/26/91)

See /usr/include/signal.h: there is no "exit" signal.  Add a &cleanup 
call as the last executable line of your script.

--tom
--
Tom Christiansen		tchrist@convex.com	convex!tchrist
		"So much mail, so little time."