我的問題是,當我運行以下它會說bash腳本已成功完成。但它不會等待腳本完成,如果它早退了,它將移動它所需的文件。那麼我在做什麼錯誤,它不會等待後臺進程完成移動文件?Perl:等待後臺進程完成
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};
所以system()所有就緒都在後臺運行bash腳本? – 2010-08-05 14:18:14
如果在子進程中使用'system'而不是'exec',則可能需要顯式調用'exit',以便子代不會重新運行僅在父進程中運行的代碼。 – mob 2010-08-05 15:00:59
@Nerdtastic - 您在子進程中調用了'fork',然後調用'exec'(或'system'),所以是的,該命令將在後臺運行。 – mob 2010-08-05 15:03:44