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)
你做错的最简单的事情是&在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,所以整个检查完全是假的.
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |