{ package GRID::Machine::Process; use warnings; use strict; use GRID::Machine::MakeAccessors; my @legal = qw(machine pid stdin stdout stderr result); my %legal = map { $_ => 1 } @legal; GRID::Machine::MakeAccessors::make_accessors(@legal); use overload q("") => 'str', bool => 'alive'; sub waitpid { my $self = shift; my $machine = $self->machine; #delegate $machine->waitpid($self, @_); } our $separator = ':'; sub str { my $self = shift; my $machine = $self->machine; "$$".$separator. $machine->{pid}.$separator. $machine->host.$separator. $machine->getpid.$separator. $self->pid; } sub alive { my $self = shift; my $pid = $self->{pid}; $self->{machine}->poll($pid); } } { package GRID::Machine::Process::Result; use warnings; use strict; use GRID::Machine::MakeAccessors; my @legal = qw(stdout stderr results status waitpid descriptor machineID errmsg); my %legal = map { $_ => 1 } @legal; GRID::Machine::MakeAccessors::make_accessors(@legal); use overload q("") => 'str', bool => 'bool'; sub bool { my $self = shift; 0+$self->Results > 1 ? 1 : $self->result; } sub result { my $self = shift; return $self->{results}[0]; } sub Results { my $self = shift; return @{$self->{results}}; } sub str { my $self = shift; return $self->{stdout}.$self->{stderr}.$self->{errmsg} } } 1;