Windows vs. Unix上的Perl:exec()

问题描述 投票:2回答:1

下面的代码可以像我在Unix上预期的那样工作-system()调用块,直到子进程完成。在Windows上,它的工作方式有所不同-system()仅在子脚本到达exec()之前阻塞,然后立即返回,并且exec-ed子脚本继续在后台运行。有没有办法使其与Unix上的工作方式相同?

# main script
my $myCmd = [$^X, 'myScript.pl', 'arg1', 'arg2'];
system($^X, 'runcmd.pl', @$myCmd);


# runcmd.pl
open(STDOUT, '>', 'out.tmp');
open(STDERR, '>', 'err.tmp');
my $exe = shift @ARGV;
unless(exec($exe, @ARGV))
{
    close(STDOUT);
    close(STDERR);
    exit(1);
}

# myScript.pl - any script that runs few seconds and produces some output, e.g:
foreach (1..5)
{
    sleep 1;
    print "$_\n";
}
perl exec
1个回答
0
投票

不完全是,不。简而言之,exec更改当前进程正在执行的程序。 Windows不支持此功能。

Perl通过在新进程中执行程序并退出现有进程来模拟exec。像在UNIX系统上一样,这使单个程序仍在运行。

您可以在Windows上通过将exec替换为system来获得所需的结果。

© www.soinside.com 2019 - 2024. All rights reserved.