perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Torsten Förtsch <torsten.foert...@gmx.net>
Subject Re: IPC::Open3 and MP
Date Wed, 20 Jan 2010 12:54:17 GMT
On Tuesday 19 January 2010 23:11:37 Randy J. Ray wrote:
> I have some code that uses IPC::Open3, and I've discovered (the hard way)
> that it doesn't work under MP2 and Apache 2.2.6. What is the "best
> practices" way of doing this under MP2?
> 
I don't see the problem. This code works here (curl output see below):

use IPC::Open3;
my ($ip, $op);
my $pid=open3 $ip, $op, undef, qw/bash -c/, 'ls -l; echo ====; cat -n; echo 
>&2 =====; exit 249';
print $ip "hugo\n"x15; close $ip;
local $/;
my $doc=readline $op;
waitpid $pid, 0;

$doc.="\nRC=$?\n";

The only IPC::Open3 related problem that I see is that it calls exit() if 
exec() fails and POSIX::exit is not available. I think that happens quite 
seldom.

It even works after adding the timeout stuff. (needs prefork MPM)

I see however several problems with your code:

- what happens if $param->{message} is too large for the pipe buffer? The 
print statement will block and you get a deadlock if the child wants to write 
something to the parent.

- open3 can die(). In this case the alarm is not reset and the apache will get 
a SIGALRM when it is not expecting it.

Torsten

-------------------------------------------------------------------
< HTTP/1.1 200 OK                                                                     
                  
< Date: Wed, 20 Jan 2010 11:07:00 GMT                                                 
                  
< Server: Apache/2.2.14 (Unix) proxy_html/3.0.1 mod_ssl/2.2.14 OpenSSL/0.9.8k 
DAV/2 mod_apreq2-20090110/2.7.1 mod_perl/2.0.5threading3 Perl/v5.10.0
< Content-Length: 1242                                                                
                                                            
< Content-Type: text/plain                                                            
                                                            
<                                                                                     
                                                            
total 107
drwxr-xr-x   2 root root  4096 Dec 11 18:12 PELMEN
drwxr-xr-x   2 root root  4096 Dec 17 17:50 bin
drwxr-xr-x   4 root root  3072 Jan  5 11:18 boot
drwxr-xr-x  17 root root  3740 Jan 20 10:13 dev
drwxr-xr-x 114 root root 12288 Jan 20 10:14 etc
drwxr-xr-x  10 root root  4096 Dec 12 23:06 home
drwxr-xr-x  13 root root  4096 Jan 15 10:24 lib
drwxr-xr-x   8 root root 12288 Jan 15 10:24 lib64
drwx------   2 root root 16384 Dec  6 21:01 lost+found
drwxr-xr-x   2 root root  4096 Jan  6 10:18 media
drwxr-xr-x   2 root root  4096 Oct 24 05:08 mnt
drwxr-xr-x   8 root root  4096 Dec 10 18:07 opt
dr-xr-xr-x 217 root root     0 Jan 20 10:13 proc
drwx------  36 root root  4096 Jan 15 14:27 root
drwxr-xr-x   3 root root 12288 Jan  8 18:47 sbin
drwxr-xr-x   2 root root  4096 Oct 24 05:08 selinux
drwxr-xr-x   4 root root  4096 Nov  3 00:43 srv
drwxr-xr-x  12 root root     0 Jan 20 10:13 sys
drwxrwxrwt  53 root root  4096 Jan 20 12:00 tmp
drwxr-xr-x  13 root root  4096 Nov  3 01:51 usr
drwxr-xr-x  16 root root  4096 Dec  6 21:09 var
====
     1  hugo
     2  hugo
     3  hugo
     4  hugo
     5  hugo
     6  hugo
     7  hugo
     8  hugo
     9  hugo
    10  hugo
    11  hugo
    12  hugo
    13  hugo
    14  hugo
    15  hugo
=====

RC=63744

Mime
View raw message