POE::Component::TSTP - A POE Component to handle Ctrl-Z


POE-Component-TSTP documentation Contained in the POE-Component-TSTP distribution.

Index


Code Index:

NAME

Top

POE::Component::TSTP - A POE Component to handle Ctrl-Z

SYNOPSIS

Top

  use POE;
  use POE::Component::TSTP;
  POE::Component::TSTP->create();
  # Rest of your POE program here

DESCRIPTION

Top

By default, POE applications do not respond to Ctrl-Z due to slightly strange signal handling semantics. This module fixes that.

You can pass in two options to the create() routine:

* Alias

An Alias for the component. By default it is called "tstp_handler".

* PreSuspend

A subref that will be called just before suspending your program.

* PostSuspend

A subref that will be called just after your program has returned from suspension (usually via the fg command).

AUTHOR

Top

Matt Sergeant, matt@sergeant.org

LICENSE

Top

This is free software. You may use it and distribute it under the same terms as perl itself.


POE-Component-TSTP documentation Contained in the POE-Component-TSTP distribution.

# $Id: TSTP.pm,v 1.3 2002/12/17 18:10:21 matt Exp $

package POE::Component::TSTP;
use strict;
use POE;
use vars qw($VERSION);

$VERSION = '0.02';

sub create {
    my $class = shift;
    my %args = @_;
    
    POE::Session->create(
        inline_states => {
            _start => \&new,
            sigtstp => \&sigtstp,
        },
        args => [ $args{Alias}, $args{PreSuspend}, $args{PostSuspend} ],
    );
}

sub new {
    my ($kernel, $heap, $alias, $pre, $post) = 
       @_[KERNEL, HEAP, ARG0, ARG1, ARG2];
    
    $kernel->sig(TSTP => 'sigtstp');
    $kernel->alias_set($alias || 'tstp_handler');
    $heap->{PreSuspend} = $pre;
    $heap->{PostSuspend} = $post;
}

sub sigtstp {
    $_[HEAP]->{PreSuspend}->(@_) if $_[HEAP]->{PreSuspend};
    local $SIG{TSTP} = 'DEFAULT';
    kill(TSTP => $$);
    $_[KERNEL]->sig_handled();
    $_[HEAP]->{PostSuspend}->(@_) if $_[HEAP]->{PostSuspend};
}

1;
__END__