[olug] Re: [Omaha.pm] Quick Bail
Jay Hannah
jay at jays.net
Fri Sep 2 12:13:57 UTC 2005
On Sep 1, 2005, at 5:22 PM, Kenneth Thompson wrote:
> A short one-liner to keep a script from executing more than one at a
> time (say a long running script kicked off from cron every minute that
> runs more than a minute occasionally...
>
> my @ps = `ps -ef | grep $0 | grep -v grep`; exit if ( @ps > 1);
I like it! Quick and dirty! -grin-
> and a more advanced version...
>
> my @procs = grep /perl .*invan\.pl/, `ps axw`;
> if (@procs > 1) {
> unless ($ENV{USER} eq "jhannah") { # Hopefully that dork knows
> what he's doing, so let him do whatever.
> die "Looks like I'm already running. I refuse to run on top of
> myself.\n @procs";
> }
> }
-laugh- Not sure I'd call my hack there more advanced. But, it is
handy in that it throws a printed list of the procs that were already
running, and lets me, specifically, shoot myself in the foot when I
want to. -grin-
For serious applications I've used Proc::ProcessTable before:
http://search.cpan.org/~durist/Proc-ProcessTable-0.40/ProcessTable.pm
I assume it's more portable than `ps -ef`, and is great when you care
about PIDs, PPIDs, memory utilization, etc.
Looks like there's tons of process control stuff on CPAN:
http://search.cpan.org/search?query=proc&mode=all
Grin,
j
More information about the OLUG
mailing list