Parallel-Mpich-MPD

 view release on metacpan or  search on metacpan

lib/Parallel/Mpich/MPD/Job.pm  view on Meta::CPAN

  my $params;
  $params=$this->jobid();

  my $ret=Parallel::Mpich::MPD::Common::__exec(cmd => commandPath('mpdkilljob')." $params");
  return $ret==0;
}

# return true if the criteria match this job
#  $criteria{pid} [ && $criteria{rank}]
#  $criteria{jobid}
#  $criteria{jobalias}
#  $criteria{username}

sub equals{
  my $this=shift;
  my %criteria=@_;
  
  #print Dumper \%criteria;
  #print $this;
  
  if (defined($criteria{jobalias}) &&  $criteria{jobalias}{$this->jobalias}){
    return 1;
  }
  
  if (defined($criteria{username}) &&  $criteria{username}{$this->username}){
    return 1;
  }
  
  if (defined($criteria{jobid}) &&  $criteria{jobid}{$this->jobid}){
    return 1;
  }
  
  foreach my $host (@{$this->_hosts()}){
    if (defined($criteria{pid})) {
      if (defined($criteria{rank})) {
        return 1 if ($criteria{rank} eq $host->{rank} && $criteria{pid} eq $host->{rank});
      }else{
        return 1 if ($criteria{pid} eq $host->{pid});
      }
    }
  }
  
}

# Send a signal to all process for the current job.
# SIGQUIT, SIGKILL, SIGSTOP, SIGCONT, SIGXCPU, SIGUSR1, SIGUSR2
sub signal{
  my $stdout="";
  my $stderr="";
  my $pid="";
  my $this=shift;
  my ($sigtype)=@_;
  if (!defined($sigtype)){
    printf STDERR "ERROR:".__PACKAGE__."::__sig() sigtype is not defined. \n";
    return 0;
  } 
  env_Init() unless defined(%env);
  my $params;
  $params="-j ".$this->jobid();

  my $ret=Parallel::Mpich::MPD::Common::__exec(cmd => commandPath('mpdsigjob')." $sigtype $params");

  return $ret==0;
}

#sub stop{  
#  my $this=shift;
#  return $this->signal("SIGSTOP");
#}

#sub continue{  
#  my $this=shift;
#  return $this->signal("SIGCONT");
#}

#sub destroy{  
#  my $this=shift;
#  return $this->signal("SIGKILL");
#}


use overload '""' => \&toSummaryString;

sub toSummaryString{
  my $self=shift;

  my $ret=$self->jobid."\t(alias='".$self->jobalias."', user='".$self->username."')\n";
  my @h=$self->hosts();
  foreach (sort {$a->{rank} <=> $b->{rank}} @h){
    $ret.="$_->{rank}\t".($_->{host}||'')."\t".($_->{pid}||'')."\t".($_->{sid}||'')."\t".($_->{pgm}||'')."\n";
  }
  return $ret."\n";
}


1; # End of Parallel::Mpich::MPD



( run in 0.899 second using v1.01-cache-2.11-cpan-71847e10f99 )