| Watchdog documentation | Contained in the Watchdog distribution. |
Watchdog::Process - Check for process in process table
use Watchdog::Process; $s = new Watchdog::Process($name,$pstring); print $s->id, $s->is_alive ? ' is alive' : ' is dead', "\n";
Watchdog::Process is an extension for monitoring processes running on a Unix host. The class provides a trivial method for determining whether a service is alive. This class has only been successfully tested on Solaris 2.6.
Returns a new Watchdog::Process object. $name is a string which will identify the service to a human. $pstring is a string which can be used to identify a process in the process table.
Returns true if the service is alive, else false.
This class is unreliable on Linux as Proc::ProcessTable::Process::cmndline() sometimes returns undef.
Paul Sharpe <paul@miraclefish.com>
Copyright (c) 1998 Paul Sharpe. England. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Watchdog documentation | Contained in the Watchdog distribution. |
package Watchdog::Process; use strict; use Alias; use Proc::ProcessTable; use base qw(Watchdog::Base); use vars qw($NAME $PSTRING $HOST $PORT);
my %fields = ( PSTRING => undef, );
sub new($$) { my $DEBUG = 0; my $proto = shift; my $class = ref($proto) || $proto; my $self = bless($class->SUPER::new(shift,undef,undef),$class); for my $element (keys %fields) { $self->{_PERMITTED}->{$element} = $fields{$element}; } @{$self}{keys %fields} = values %fields; $self->{PSTRING} = shift; return $self; } #------------------------------------------------------------------------------
sub is_alive() { my $DEBUG = 0; my $self = attr shift; my $t = new Proc::ProcessTable; for ( @{$t->table} ) { # Proc::ProcessTable::Process::cmndline() seems to return # undefined sometimes. Bug reported to author. my $cmndline = $_->cmndline; print STDERR "\$cmndline = $cmndline\n" if $DEBUG; return 1 if defined($cmndline) && $cmndline =~ /$PSTRING/; } return 0; } #------------------------------------------------------------------------------