# Untested, incomplete code. my %map = ( 'host-p' => [qw[ cron apache ]] , 'host-q' => [qw[ ntpd ]] ); for my $host ( sort keys %map ) { # Log on $host at this point. # Check processes. foreach my $proc ( @{ $map{ $host } } ) { printf qq[%s: %3s running] , $proc , check_proc( $proc ) ? '' : 'not' ; } # Log off. } sub check_proc { my ( $proc ) = @_; my $ps = make_ps( $proc ); my $res = qx[ $ps ]; # Check $? for cause of failure if you care. return defined $res && $res =~ m{ \b psname = $proc \b }x; } sub make_ps { return sprintf q[ps -ef | grep psname=%s] , $_[0] ; }