Perl 为什么IPC::Open2::Open2返回父进程ID?

Perl 为什么IPC::Open2::Open2返回父进程ID?,perl,ipc,Perl,Ipc,我在cygwin的Perl 5.10中运行了以下脚本: use IPC::Open2; use Symbol qw(gensym); my $in = gensym(); my $out = gensym(); my $pid = open2($out, $in, "$exe"); waitpid $pid, 0; $pid的值是正在运行的perl进程的pid,而不是$exe指向的可执行文件的pid。有什么想法吗?我刚跑了: #!/usr/bin/perl use s

我在cygwin的Perl 5.10中运行了以下脚本:

use IPC::Open2;
use Symbol qw(gensym);

my $in = gensym();
my $out = gensym();
my $pid = open2($out, $in, "$exe");

waitpid $pid, 0;
$pid的值是正在运行的perl进程的pid,而不是
$exe
指向的可执行文件的pid。有什么想法吗?

我刚跑了:

#!/usr/bin/perl

use strict;
use warnings;

use IPC::Open2;

my ($in, $out);

my $pid = open2($out, $in, ls => qw(-R /));

warn $pid, "\n";

waitpid $pid, 0;

__END__
并观察到:

     2916    2620    2916       2912  con 1003 14:49:56 /usr/bin/perl
O    2088    2916    2916       4064  con 1003 14:49:57 /usr/bin/ls
你为什么还要用gensym的东西?

我刚跑了:

#!/usr/bin/perl

use strict;
use warnings;

use IPC::Open2;

my ($in, $out);

my $pid = open2($out, $in, ls => qw(-R /));

warn $pid, "\n";

waitpid $pid, 0;

__END__
并观察到:

     2916    2620    2916       2912  con 1003 14:49:56 /usr/bin/perl
O    2088    2916    2916       4064  con 1003 14:49:57 /usr/bin/ls

你为什么还要使用gensym的东西呢?

这对我来说在草莓Perl 5.10和cygwin中似乎很管用。我输出两个进程ID以确保我看到的是正确的东西。我还在$exe中放了一些东西,所以有一个命令要执行。奇怪的是,open2即使在
$exe
未定义并且仍然返回一个不是父进程ID的PID时也能工作

use IPC::Open2; use Symbol qw(gensym); $exe = 'cmd.exe /c dir /b'; my $in = gensym(); my $out = gensym(); my $pid = open2($out, $in, $exe); print "I am pid $$: open2 is pid $pid\n"; close $in; print <$out>; waitpid $pid, 0; 使用IPC::Open2; 使用符号qw(gensym); $exe='cmd.exe/c dir/b'; my$in=gensym(); my$out=gensym(); my$pid=open2($out,$in,$exe); 打印“我是pid$$:open2是pid$pid\n”; 以美元收盘; 印刷品; waitpid$pid,0;
你不需要gensym的东西。如果open2的参数是未定义的左值,则open2将自动生成文件句柄。

这似乎适用于草莓Perl 5.10和cygwin。我输出两个进程ID以确保我看到的是正确的东西。我还在$exe中放了一些东西,所以有一个命令要执行。奇怪的是,open2即使在
$exe
未定义并且仍然返回一个不是父进程ID的PID时也能工作

use IPC::Open2; use Symbol qw(gensym); $exe = 'cmd.exe /c dir /b'; my $in = gensym(); my $out = gensym(); my $pid = open2($out, $in, $exe); print "I am pid $$: open2 is pid $pid\n"; close $in; print <$out>; waitpid $pid, 0; 使用IPC::Open2; 使用符号qw(gensym); $exe='cmd.exe/c dir/b'; my$in=gensym(); my$out=gensym(); my$pid=open2($out,$in,$exe); 打印“我是pid$$:open2是pid$pid\n”; 以美元收盘; 印刷品; waitpid$pid,0; 你不需要gensym的东西。如果open2的参数是未定义的左值,则open2将自动生成文件句柄