in reply to How do I determine if my script is already running?

Several options available:

GoldClaw UPDATE:Of cource flock'ing is better. However, make sure to catch any signals that will kill perl, and do a normal exit. If not, I belive perl will die without releasing the lock.

  • Comment on Re: How do I determine if my script is already running?

Replies are listed 'Best First'.
Re (tilly) 2: How do I determine if my script is already running?
by tilly (Archbishop) on Feb 19, 2001 at 09:07 UTC
    Perl's signal handling is unreliable. I do not believe that you need to catch signals or do any cleanup. My understanding is that the OS is responsible for flock. If your process is terminated unexpectedly, the OS is responsible for noting that your filehandles are now closed and your locks are ended.

    If anyone has any documentation to the contrary, please show me. Also a failure script would be of interest. I am currently relying on this behaviour in production and if it is unreliable, I would really like to know. In the meantime you can take the low-tech approach and run the following script from multiple xterms while trying to create a problem...

    use Fcntl qw(:flock); my $file = "my.lock"; open(FOO, ">> $file") or die "Cannot write to $file: $!"; print "Getting the lock\n"; flock (FOO, LOCK_EX) or die "Cannot flock $file: $!"; print "Locked by $$, hit enter to exit: "; <STDIN>;
    At least on Linux I am unable to get this to act in anything other than the expected manner...
      If your process is terminated unexpectedly, the OS is responsible for noting that your filehandles are now closed and your locks are ended.

      FWIW, Stevens agress with you in Advanced Programming In The Unix Environment.

      Of course, YMMV.

      Peace,
      -McD