Perl 为什么IPC::Open2::Open2返回父进程ID?
我在cygwin的Perl 5.10中运行了以下脚本: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
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将自动生成文件句柄