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/