On Wed, Oct 29, 2008 at 13:50, icarus <[EMAIL PROTECTED]> wrote:
> perl 5.8.2
> OS: AIX fully POSIX compliant
>
> my script moves files from one dir to another.
> When I want my script to stop, should I pass it along the signal INT
> or TERM?
>
> INT just interrupts the script.  It finishes whatever it's processing
> and then it's done.
>
> TERM on the other hand, just sends a TERMination signal, waits a few
> seconds, then KILLs the program.  TERM is more common I guess when
> starting/stopping unix shell scripts in the init dir.
>
> My fear is that if I pass the TERM signal, maybe the system will chop
> off the files that are being moved on the fly.  The "few seconds" are
> unpredictable in value at least on my system. So the system might say
> 'it's been too long, let's kill it."
>
> Any thoughts? Is there a "perlish" way to do it?

I'd send a custom signal (say, USR1).  When the script receives that
signal, it sets a flag indicating it should perform a clean exit.
Totally untested:

----------
my $done = 0;

sub sigusr {
    $done = 1;
}

$SIG{USR1} = \&sigusr;

while(!$done)
{
    # Do something
}
# Clean up and exit
----------

It won't work if "do something" is perpetually blocked on a read or
somesuch, but if you wake up periodically to go through the loop,
you'll be fine.

-- 
Mark Wagner

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to