Stefan O'Rear

NAME

IO::Pty::HalfDuplex::JobControl - the default backend of IO::Pty::HalfDuplex

SYNOPSIS

    IO::Pty::HalfDuplex->new(backend => 'JobControl')

CAVEATS

IO::Pty::HalfDuplex::JobControl is implemented using POSIX job control, and as such it requires foreground access to a controlling terminal. Programs which interfere with process hierarchies, such as strace -f, will break IO::Pty::HalfDuplex::JobControl.

Certain ioctls used by terminal-aware programs are treated as reads by POSIX job control. If this is done while the input buffer is empty, it may cause a spurious stop by IO::Pty::HalfDuplex::JobControl. Under normal circumstances this manifests as a need to transmit at least one character before the starting screen is displayed.

IO::Pty::HalfDuplex::JobControl relies on a forked-but-not-execed process to mediate job control, and as such any files open at spawn time will be closed until the slave is killed.

IO::Pty::HalfDuplex::JobControl sends many continue signals to the slave process. If the slave catches SIGCONT, you may see many spurious redraws. If possible, modify your child to handle SIGTSTP instead.

While this module will theoretically work on any POSIX.1 compliant operating system, in practice it exercises many dark corners and has required bug-workaround code everywhere it has been tested. It is known to work on Mac OS 10.5.7 and Linux 2.6.16. On FreeBSD 7.0 it passes tests but is extremely slow due to a kernel bug with no obvious workaround.

BUGS

See IO::Pty::HalfDuplex.

COPYRIGHT AND LICENSE

Copyright 2008-2009 Stefan O'Rear.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.