Perl:等待后台流程完成

Col*_*ood 2 perl backgroundworker

我的问题是,当我运行以下内容时,它会说bash脚本已成​​功完成.但它不会等待脚本完成,如果它提前退出它将移动它需要的文件.那么我做错了什么,它不会等待后台进程完成移动文件?

my $pid = fork();
    if($pid == -1){
     die;
    } elsif ($pid == 0){
     #system(@autoDeploy) or die;
     logit("Running auto deploy for $bundleApp");
     exec("./deployer -d $domain.$enviro -e $enviro >> /tmp/$domain.$enviro &") 
                    or logit("Couldnt run the script.");
    }
    while (wait () != -1){

    }
    logit("Ran autoDeploy");

    logit("Moving $bundleApp, to $bundleDir/old/$bundleApp.$date.bundle");
    move("$bundleDir/$bundleApp", "$bundleDir/old/$bundleApp.$date.bundle");
    delete $curBundles{$bundleApp};
Run Code Online (Sandbox Code Playgroud)

hob*_*bbs 5

你做错的最简单的事情是&在exec命令行的末尾使用- 这意味着你要分两次,你正在进行的过程wait会立即退出.

我实际上并没有在这里看到什么目的fork/ exec为你服务,但是,如果你没有重定向I/O而不做任何事情,只是等待exec'd进程完成; 这system是为了什么.

system("./deployer -d $domain.$enviro -e $enviro >> /tmp/$domain.$enviro") 
                and logit("Problem running deployer: $?");
Run Code Online (Sandbox Code Playgroud)

将轻松用于替换代码的前十二行.

就像传递中的一张纸条fork一样,失败时不会返回-1; 它返回undef,所以整个检查完全是假的.