The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Zing::Fork - Fork Manager

ABSTRACT

Scheme Fork Manager

SYNOPSIS

  use Zing::Fork;
  use Zing::Process;

  my $scheme = ['MyApp', [], 1];
  my $fork = Zing::Fork->new(scheme => $scheme, parent => Zing::Process->new);

  # $fork->execute;

DESCRIPTION

This package provides provides a mechanism for forking and tracking processes, as well as establishing the parent-child relationship. Note: The $num part of the application scheme, i.e. ['MyApp', [], $num], is ignored and launching the desired forks requires calling "execute" multiple times.

LIBRARIES

This package uses type constraints from:

Zing::Types

ATTRIBUTES

This package has the following attributes:

parent

  parent(Process)

This attribute is read-only, accepts (Process) values, and is required.

processes

  processes(HashRef[Process])

This attribute is read-only, accepts (HashRef[Process]) values, and is optional.

scheme

  scheme(Scheme)

This attribute is read-only, accepts (Scheme) values, and is required.

space

  space(Space)

This attribute is read-only, accepts (Space) values, and is optional.

METHODS

This package implements the following methods:

execute

  execute() : Process

The execute method forks a process based on the scheme, adds it to the process list and returns a representation of the child process.

execute example #1
  # given: synopsis

  my $process = $fork->execute;

monitor

  monitor() : HashRef[Int]

The monitor method calls "waitpid" in perlfunc on tracked processes and returns the results as a pid/result map.

monitor example #1
  # given: synopsis

  $fork->execute;
  $fork->execute;

  # forks still alive

  my $results = $fork->monitor;

  # { 1000 => 1000, ... }
monitor example #2
  # given: synopsis

  $fork->execute;
  $fork->execute;

  # forks are dead

  my $results = $fork->monitor;

  # { 1000 => -1, ... }

sanitize

  sanitize() : Int

The sanitize method removes inactive child processes from the process list and returns the number of processes remaining.

sanitize example #1
  # given: synopsis

  $fork->execute; # dead
  $fork->execute; # dead

  my $results = $fork->sanitize; # 0
sanitize example #2
  # given: synopsis

  $fork->execute; # live
  $fork->execute; # dead

  my $results = $fork->sanitize; # 1
sanitize example #3
  # given: synopsis

  $fork->execute; # live
  $fork->execute; # live

  my $results = $fork->sanitize; # 2

terminate

  terminate(Str $signal = 'kill') : HashRef[Int]

The terminate method call "kill" in perlfunc and sends a signal to all tracked processes and returns the results as a pid/result map.

terminate example #1
  # given: synopsis

  $fork->execute;
  $fork->execute;

  my $results = $fork->terminate; # kill
terminate example #2
  # given: synopsis

  $fork->execute;
  $fork->execute;

  my $results = $fork->terminate('term');
terminate example #3
  # given: synopsis

  $fork->execute;
  $fork->execute;

  my $results = $fork->terminate('usr2');

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues