我正在构建一个PS程序来执行几个java程序。某些程序可能会占用我想要允许的最长时间。如果发生这种情况,我想停止执行它们并继续前进。到目前为止,我已经用过这个:
$j = Start-Job -ScriptBlock {java -jar .\Tournament.jar Students.csv 7777}
Wait-Job $j -Timeout 10 | out-null
if($j.State -eq "Completed"){ "Done!" }
elseif($j.State -eq "Running"){"Program took longer than the max limit."}
Remove-Job -force $j
似乎无法识别jar文件仍在运行,因为它将“已完成”条件标记为true。 jar文件至少需要70秒才能执行。此外,它似乎确实关闭了jar执行,因为jar永远不会创建它的输出文件。
2015年11月30日更新
用这个代替上面的代码,似乎有效:
$p = Start-Process java -ArgumentList '-jar', '.\Tournament.jar', 'Students.csv', '7777' -RedirectStandardError '.\console.err' -NoNewWindow -passthru
if(! $p.WaitForExit(10000)){
"Program took longer than max time"
$p.kill()
}
任何其他意见将不胜感激。