On Thu, Mar 29, 2007 at 09:06:20PM +0100, Stephane Chazelas wrote:
[...]
> print STDOUT "...";
> actually did a write(16, "..."), so STDOUT was affected another
> fd that 1. Tomorrow, I'll try doing a system() within perl, but
> I suspect for instance system("echo foo") will no output
> anything to the socket.
[...]
I can confirm. This script:
print "Content-Type: text/plain\r\n\r\n";
print "test\n";
system 'lsof -p $$';
print "test\n";
outputs
test
test
while
print "Content-Type: text/plain\r\n\r\n";
print "test\n";
system 'lsof -p $$ >&16';
print "test\n";
outputs
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
[...]
sh 19113 www-data 0r CHR 1,3 1673 /dev/null
sh 19113 www-data 1w CHR 1,3 1673 /dev/null
sh 19113 www-data 2w REG 8,9 2041426 244362 /var/log/apache2/error.log
[...]
sh 19113 www-data 16u IPv4 14009527 TCP ant.artesyncp.com:www->ant.artesyncp.com:43127 (ESTABLISHED)
fds 0 and 1 are /dev/null as they should be if apache was not running modperl
because modperl does
dup(0);
close(0);
dup(1);
close(1);
so that the second dup assigns stdin as a copy of stdout!
Cheers,
Stephane
Mail converted by mhonarc 2.6.15
This archive provided courtesy of JSW4.NET, Internet Hosting Services for Small Business.