[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