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

NAME

Proc::tored::Role::Running

SYNOPSIS

  package Some::Thing;
  use Moo;

  with 'Proc::tored::Running';

  sub run {
    my $self = shift;

    $self->start;

    while ($self->is_running) {
      do_stuff(...);
    }
  }

DESCRIPTION

Classes consuming this role are provided with controls to "start" and "stop" voluntarily, along with a SIGTERM handler that is active while the class "is_running". If a SIGTERM is received via another process (by calling "stop_running_process"), the class will voluntarily "stop" itself.

ATTRIBUTES

run_guard

A Guard used to ensure signal handlers are restored when the object is destroyed.

METHODS

is_running

Returns true while the service is running in the current process.

start

Flags the current process as running. While running, handlers for SIGTERM, SIGINT, SIGPIPE, and SIGHUP are installed. After calling this method, "is_running" will return true.

stop

Flags the current process as not running and restores any previously configured signal handlers. Once this method has been called, "is_running" will return false.

stop_running_process

Issues a SIGTERM to the active process. Returns 0 immediately if the pid file does not exist or is empty. Otherwise, polls the running process until the OS reports that it is no longer able to receive signals (with `kill(0, $pid)`).

Optional parameter $timeout may be specified in fractional seconds, causing stop_running_process to block up to (around) $timeout seconds waiting for the signaled process to exit.

Returns the pid of the completed process otherwise.