Watchdog::Process - Check for process in process table


Watchdog documentation Contained in the Watchdog distribution.

Index


Code Index:

NAME

Top

Watchdog::Process - Check for process in process table

SYNOPSIS

Top

  use Watchdog::Process;
  $s = new Watchdog::Process($name,$pstring);
  print $s->id, $s->is_alive ? ' is alive' : ' is dead', "\n";

DESCRIPTION

Top

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.

CLASS METHODS

Top

new($name,$pstring)

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.

is_alive()

Returns true if the service is alive, else false.

BUGS

Top

This class is unreliable on Linux as Proc::ProcessTable::Process::cmndline() sometimes returns undef.

SEE ALSO

Top

Proc::ProcessTable

AUTHOR

Top

Paul Sharpe <paul@miraclefish.com>

COPYRIGHT

Top


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;
}

#------------------------------------------------------------------------------