# # Controlling concurrent runs with Perl
APLawrence.com -  Resources for Unix and Linux Systems, Bloggers and the self-employed

Controlling concurrent runs with Perl

I've removed advertising from most of this site and will eventually clean up the few pages where it remains.

While not terribly expensive to maintain, this does cost me something. If I don't get enough donations to cover that expense, I will be shutting the site down in early 2020.

If you found something useful today, please consider a small donation.



Some material is very old and may be incorrect today

© December 2005 Anthony Lawrence

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.




#!/usr/bin/perl5
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:

#!/usr/bin/perl
open (L, "/tmp/mypid.lock");
$pid=<L>;
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.


If you found something useful today, please consider a small donation.



Got something to add? Send me email.





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

Printer Friendly Version

->
-> Controlling concurrent runs with Perl

3 comments


Inexpensive and informative Apple related e-books:

Take Control of Numbers

Take Control of Pages

Take control of Apple TV, Second Edition

El Capitan: A Take Control Crash Course

Take Control of iCloud





More Articles by © Anthony Lawrence



Related Articles






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

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



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

gravatar
wow, that's cool indeed ;-)




------------------------


Printer Friendly Version


Related Articles

Have you tried Searching this site?

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


Printer Friendly Version





FORTRAN—the "infantile disorder"—, by now nearly 20 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use. (Edsger W. Dijkstra)




Linux posts

Troubleshooting posts


This post tagged:

Perl

Programming



Unix/Linux Consultants

Skills Tests

Unix/Linux Book Reviews

My Unix/Linux Troubleshooting Book

This site runs on Linode