falken has asked for the wisdom of the Perl Monks concerning the following question:
I have an application that i'm executing with in perl with the system("cmd &") call. For some reason it is requiring it have STDIN. I have closed all STDIN, STDOUT STDERR fd's and tried the POSIX setsid(). All with no luck. Is there anyway in perl I can switch the tty with posix functions and (or) fool the application into a another non-used tty?
The posix way to obtain a new controlling tty is
to first get rid of the old one, as you've outlined,
and then open a new one; the first one opened
becomes the new controlling tty. You can't use "/dev/tty"
for this purpose of course, you'd have to open a
real tty device. These are /dev/pty*, /dev/console,
and devices corresponding to actual serial ports.
Is the program insisting on a tty, or just a valid
stdin? Instead of just closing stdin/stdout/stderr
you can try opening them to /dev/null, and see if
that is sufficient. If it needs a tty, one can
often use /dev/console.