Controlling concurrent runs with Perl

Sometimes you have a program that can't be run by more than one person, or one that must run frequently but you don't know for sure how long an instance of it will take.

One way to accomplish that is to use a lock file.

open(CNT, "/tmp/mylockfile");
flock CNT,2;
# program hangs here until other instance is done
# .. other processing when it is free
# release the lock
flock CNT,8;
close CNT;

If an instance is running, another instance will be stopped at the "flock CNT,2;" line and won't continue until the first program executes "flock CNT,8;".

But what if you don't want to just hang? An easy way to do that is to write your PID to a file:

open (L, "/tmp/mypid.lock");
close L;
$stat=kill 0, $pid ;
chomp $stat;
chomp $pid;
if ($stat and $pid) {
 print  "\nExiting because $pid exists\n";
 exit 1;
open (L, ">/tmp/mypid.lock");
print L "$$\n";
close L;
.. other code

The "kill 0" actually doesn't even send a signal; it just checks to see if the process exists. If it does, we print a message and exit; otherwise the code continues.

These are two simple ways to control program execution with Perl.

Got something to add? Send me email.

(OLDER) <- More Stuff -> (NEWER)    (NEWEST)   

Printer Friendly Version

-> -> Controlling concurrent runs with Perl


Increase ad revenue 50-250% with Ezoic

More Articles by

Find me on Google+

© Anthony Lawrence

Mon Dec 12 15:31:40 2005: 1430   bruceg

Thanks, Tony! Did you have me in mind, with my kludgy shell script I sent you a while back? This looks like what I need, intead of the shell madness I was unleashing on that poor server :-)

- Bruce

Tue Dec 13 21:43:01 2005: 1436   TonyLawrence

No, it wasn't your script - just a general thing.

Thu Sep 3 20:50:32 2009: 6845   anonymous

wow, that's cool indeed ;-)

Kerio Samepage

Have you tried Searching this site?

Support Rates

This is a Unix/Linux resource website. It contains technical articles about Unix, Linux and general computing related subjects, opinion, news, help files, how-to's, tutorials and more.

Contact us

After establishing competence and ability, your customer wants to know that you are honest and that you care about their needs. Sell that, because that's what they really want to buy. (Tony Lawrence)

This post tagged: