use IO::Pty; use POSIX; use IO::Tty qw(TIOCSCTTY); $master = new IO::Pty || die "cant open PTY $!\n"; $slave = $master->slave(); $slave->set_raw(); $name = $slave->ttyname(); print STDERR "### PTY $name\n"; $slave_fd = $slave->fileno(); $master_fd = $master->fileno(); my $pid = fork(); die "Cannot fork" if not defined $pid; unless ($pid) { POSIX::close(1); POSIX::close(0); POSIX::close($master_fd); close($device->{handle}); POSIX::dup2($slave_fd,0); POSIX::dup2($slave_fd,1); POSIX::Setsid; ioctl($slave,TIOCSCTTY,0); $yes = POSIX::isatty($slave); print STDERR "## TTY $yes\n"; exec("$execline") || die "Shouldnt be here. Exec failed ? : $!"; exit 0; } POSIX::close($slave_fd); print STDERR "forked\n"; POSIX::close($master_fd);