in reply to how to exit if tool is already running

Here is an old brute force method, that relies on the $0 name of the script in the process table. Works on linux only.
#!/usr/bin/perl -w #just run it. The first time it starts the daemon. If you try to start # it a second time, it gives an error msg. Run it with any # commandline argument, #like "k" will kill all instances of the script use strict; use IO::Handle; use Proc::ProcessTable; use Proc::Daemon; my $t1 = new Proc::ProcessTable; my @pids; my $pid; foreach my $p (@{$t1->table}){ if($p->cmndline =~ /apache-monitor/){ $pid = $p->pid; #print "$pid\n"; push(@pids,$pid); #unless $pid == $$; } } ################################################### if (exists $ARGV[0]) { foreach $pid (@pids){ print "killing pid $pid\n"; kill 9,$pid; } } #################################################### if ($#pids > 0) { print "@pids already running!\n"; exit; } #################################################### Proc::Daemon::Init; #open(LOG,">>/var/log/apache-monitor.log") or die $!; #when run as roo +t open(LOG,">>/tmp/apache-monitor.log") or die $!; #for testing while (1){ my $ok =0; my $t = new Proc::ProcessTable; foreach my $p (@{$t->table}){ if($p->cmndline =~ /\/usr\/sbin\/httpd/){ print LOG time(),' ',$p->cmndline," already running!\n"; $ok=1;last; } } if ($ok == 0) {print LOG time(),' ',"failed!\n";} LOG->flush; sleep(15); }

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku

Replies are listed 'Best First'.
Re^2: how to exit if tool is already running
by srikrishnan (Beadle) on Aug 13, 2010 at 12:06 UTC

    Hi,

    I have checked "win32::Mutex". But frankly said I cant understand how to use that for my purpose. Documentation is not userfriendly. If anybody have patience, please give me some sample code for my purpose, it would be very helpful.

    Thanks in Advance,

    Srikrishnan